Ciclo for java
Ciao a tutti,
sto cercando di risolvere questo esercizio in preparazione all'esame di programmazione:
"Considerate la dichiarazione di variabile Rettangolo[] rettangoli e il seguente frammento di codice:
int x = 0; try {
for (Rettangolo r: rettangoli)
x = x + (int) r.getBase();
x = (int) rettangoli[x / x].getBase();
} catch (ArithmeticException e) {
x = x + 33;
} catch (ArrayIndexOutOfBoundsException e) {
x = x + 15;
} catch (NullPointerException e) {
x = x + 27; }
Ricordando che:
• ArithmeticException viene sollevata in caso di anomalie nel calcolo di operazioni aritmetiche,
• ArrayIndexOutOfBoundsException viene sollevata quando si tenti di accedere a una posizione inesistente in un array,
• NullPointerException viene sollevata quando si tenti di accedere a un oggetto tramite un riferimento Null.
Indicate nel riquadro corrispondente, in ciascuno dei seguenti casi, il valore della variabile x dopo l’esecuzione:
(a) l’array riferito da rettangoli contiene (nell’ordine indicato) riferimenti a oggetti che rappresentano un rettangolo di base 1 e altezza 10, un rettangolo di base 2 e altezza 10, un rettangolo di base 3 e altezza 10.
(b) rettangoli contiene null.
(c) l’array riferito da rettangoli contiene, come unico elemento, un riferimento a un oggetto che rappresenta un rettangolo di base 10 e altezza 1.
(d) l’array riferito da rettangoli `e vuoto.
Ho risolto molti esercizi simili, ma questo non mi esce...chi riesce a spiegarmi il perché? Io ho ottenuto giusto solo il punto b con risultato pari a 27. Il resto nada
Soluzioni: punto a = 2
punto b = 27
punto c = 25
punto d = 33
Grazie
sto cercando di risolvere questo esercizio in preparazione all'esame di programmazione:
"Considerate la dichiarazione di variabile Rettangolo[] rettangoli e il seguente frammento di codice:
int x = 0; try {
for (Rettangolo r: rettangoli)
x = x + (int) r.getBase();
x = (int) rettangoli[x / x].getBase();
} catch (ArithmeticException e) {
x = x + 33;
} catch (ArrayIndexOutOfBoundsException e) {
x = x + 15;
} catch (NullPointerException e) {
x = x + 27; }
Ricordando che:
• ArithmeticException viene sollevata in caso di anomalie nel calcolo di operazioni aritmetiche,
• ArrayIndexOutOfBoundsException viene sollevata quando si tenti di accedere a una posizione inesistente in un array,
• NullPointerException viene sollevata quando si tenti di accedere a un oggetto tramite un riferimento Null.
Indicate nel riquadro corrispondente, in ciascuno dei seguenti casi, il valore della variabile x dopo l’esecuzione:
(a) l’array riferito da rettangoli contiene (nell’ordine indicato) riferimenti a oggetti che rappresentano un rettangolo di base 1 e altezza 10, un rettangolo di base 2 e altezza 10, un rettangolo di base 3 e altezza 10.
(b) rettangoli contiene null.
(c) l’array riferito da rettangoli contiene, come unico elemento, un riferimento a un oggetto che rappresenta un rettangolo di base 10 e altezza 1.
(d) l’array riferito da rettangoli `e vuoto.
Ho risolto molti esercizi simili, ma questo non mi esce...chi riesce a spiegarmi il perché? Io ho ottenuto giusto solo il punto b con risultato pari a 27. Il resto nada

Soluzioni: punto a = 2
punto b = 27
punto c = 25
punto d = 33
Grazie
Risposte
Proviamo a vederlo passaggio per passaggio (salto il punto b in quanto hai detto che ti è venuto).
a) abbiamo un array così formato (scrivo tra parentesi base e altezza ma sappiamo che in realtà sono oggetti):
Bene, il ciclo for non fa altro che eseguire la somma delle basi e metterla nella variabile x che quindi, dopo il ciclo, conterrà il valore \(\displaystyle x=6 \).
La riga successiva
c) qui invece abbiamo un solo elemento nell'array che ha valori di base 10 e altezza 1, quindi, dopo il ciclo for, \(\displaystyle x \) contiene il valore \(\displaystyle 10 \). Ma alla riga successiva, che come prima va a prendere \(\displaystyle x/x \), si tenterà di accedere alla posizione \(\displaystyle 1 \) dell'array, che non esiste (in quanto abbiamo un solo elemento e quindi solo rettangoli[0] è definito) e, di conseguenza, viene sollevata l'eccezione ArrayIndexOutOfBoundsException ed eseguito il relativo codice che somma al valore di \(\displaystyle x \) precedente 15 quindi
d) non avendo elementi il ciclo for non viene neanche eseguito e quindi si va direttamente alla riga
dove però \(\displaystyle x = 0 \) e quindi la divisione \(\displaystyle x/x \) è una divisione per zero!
Viene quindi sollevata l'eccezione ArithmeticException che somma al valore precedente di x 33 e quindi
Spero di essere stato chiaro, se così non fosse chiedi pure!
a) abbiamo un array così formato (scrivo tra parentesi base e altezza ma sappiamo che in realtà sono oggetti):
rettangoli[0] = (1, 10) rettangoli[1] = (2, 10) rettangoli[2] = (3, 10)
Bene, il ciclo for non fa altro che eseguire la somma delle basi e metterla nella variabile x che quindi, dopo il ciclo, conterrà il valore \(\displaystyle x=6 \).
La riga successiva
x = (int) rettangoli[x / x].getBase();non fa altro che andare a prendere il valore della base del rettangolo alla posizione \(\displaystyle x/x \), ovvero \(\displaystyle 6/6=1 \), quindi il valore
rettangoli[1].getBase() = 2
c) qui invece abbiamo un solo elemento nell'array che ha valori di base 10 e altezza 1, quindi, dopo il ciclo for, \(\displaystyle x \) contiene il valore \(\displaystyle 10 \). Ma alla riga successiva, che come prima va a prendere \(\displaystyle x/x \), si tenterà di accedere alla posizione \(\displaystyle 1 \) dell'array, che non esiste (in quanto abbiamo un solo elemento e quindi solo rettangoli[0] è definito) e, di conseguenza, viene sollevata l'eccezione ArrayIndexOutOfBoundsException ed eseguito il relativo codice che somma al valore di \(\displaystyle x \) precedente 15 quindi
x = 10 + 15 = 25
d) non avendo elementi il ciclo for non viene neanche eseguito e quindi si va direttamente alla riga
x = (int) rettangoli[x / x].getBase();
dove però \(\displaystyle x = 0 \) e quindi la divisione \(\displaystyle x/x \) è una divisione per zero!
Viene quindi sollevata l'eccezione ArithmeticException che somma al valore precedente di x 33 e quindi
x = 0 + 33 = 33
Spero di essere stato chiaro, se così non fosse chiedi pure!

Scusa se ti rispondo ora, ma ho svolto solo l'esercizio ieri (mi piace rifarli per capire se li capisco o meno).
Mi è venuto!! La tua spiegazione è stata fantastica e semplice allo stesso tempo
Oggi ho fatto l'esame e mi sono trovato un esercizio molto simile che sono riuscito a fare tranquillamente
Grazie ancora e alla prossima
Mi è venuto!! La tua spiegazione è stata fantastica e semplice allo stesso tempo

Oggi ho fatto l'esame e mi sono trovato un esercizio molto simile che sono riuscito a fare tranquillamente

Grazie ancora e alla prossima

Mi è venuto!! La tua spiegazione è stata fantastica e semplice allo stesso tempo 
____________________
Our Actual Exams and Test-king.com - comptia certification gre exam provide you 100% pass guarantee. You can get access to and exams. Our Testking cissp certification is also very useful tool. scuhs.edu for its easiness. Granite State College

____________________
Our Actual Exams and Test-king.com - comptia certification gre exam provide you 100% pass guarantee. You can get access to and exams. Our Testking cissp certification is also very useful tool. scuhs.edu for its easiness. Granite State College