|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
[java] altro problema stupido
class es78 {
public static void main(String []args) { int i; double[] a=new double[10]; for (i=0; i<=a.length-1; i++) a[i]= Leggi.unDouble(); System.out.println(a[i]); } } con questo prpgrama con javac nn mi da errore ma eseguendolo. dopo aver iserito i valori mi da questo errore: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at es78.main(es78.java:9) |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Spagna
Messaggi: 556
|
ma le parentesi del for??
Codice:
class es78 {
public static void main(String []args) {
int i;
double[] a=new double[10];
for (i=0; i<=a.length-1; i++) {
a[i]= Leggi.unDouble();
System.out.println(a[i]);
}
}
}
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
gia provato!
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
forsenn mi sono spiefato bene....devo prima inserirli tutti e poi stamparli tutti...
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Spagna
Messaggi: 556
|
il codice qui sotto funzia alla perfezione. Anche quello che ti ho postato prima funzionava benissimo. L'unico errore puo' essere in Leggi.unDouble(); che non fa il suo dovere tutto qui.
al limite posta la classe Leggi... ciao Codice:
class es78 {
public static void main(String []args) {
int i;
double[] a=new double[10];
for (i=0; i<a.length; i++) {
a[i] = Leggi.unDouble();
}
for(int k=0;k<a.length;k++){
System.out.println(a[k]);
}
}
}
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Nel codice postato inizialmente da michelev83 il problema è nella linea
System.out.println(a[i]); Il ciclo for infatti aumenta il valore di "i" partendo a 0 e arriva fino a 10. Quando arriva a 10 la condizione del ciclo (i <= a.length -1) risulta "false" e il ciclo viene interrotto con i che vale 10. La linea successiva al blocco for richiede l'accesso all'elemento di indice i ( = 10) di un array che ha 10 elementi (indice max = 9) e frappete, va tutto a schifio. Ciao. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
si e qual e la solozione
grazie! |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
questo e il testo dell esercizio
Scrivete un programma che legge in input 10 valori di tipo double, li memorizza in un array e li visualizza. Usate il ciclo for e il ".length". Modificate il programma usando il while invece del for. |
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Il secondo post di mazza2 mi sembra corrispondere alla soluzione dell'esercizio (in versione for). Il primo ciclo legge, il secondo stampa.
Tenendo conto che il while è un for senza inizializzazione ed incremento, che l'inizializzazione deve essere fatta una sola volta, prima del primo uso e l'incremento dopo la verifica, una volta per ogni passaggio nel ciclo, dovresti risolvere con poche modifiche anche la richiesta di usare while al posto di for. Ciao. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
grazie ora prvo ! nn avevo notato quel post!
coem farei senza di voi !
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
Scrivete un programma che legge in input 10 valori di tipo double, li memorizza in un array e li visualizza in ordine invertito (dall'ultimo al primo).
Scrivete un programma che ha lo stesso effetto del precedente, ma i valori vanno memorizzati nell'array a partire dall'ultima posizione (e visualizzati sempre in ordine invertito dall'ultimo letto al primo). come si fannoo nn hocapito niente dei for anndati |
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Stando al testo non devi usare dei cicli annidati (un ciclo dichiarato all'interno del corpo di un altro ciclo), semmai usi due cicli in successione (uno per leggere e memorizzare, uno per stampare). Si tratta in buona sostanza di un esercizio sugli indici degli array.
dichiari e inizializzi un array di 10 double; for(int i = 0; i < 10;i++) -> leggi un double e lo infili nell'array in posizione i; //un altro for, non annidato for(int i = 9; i >= 0; i--) -> stampa a video array[i]; Il secondo è identico, solo che il primo ciclo deve comportarsi come l'ultimo (cioè andare da 9 a 0 incluso). Ciao. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
si sto capendo! grasie!
|
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Non ho capito se la risposta sia sarcastica o se tu stia capendo davvero.
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
no no sto capendo davvero! davvero graziwe!
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
altro probelmino devo fare un rpgrammino che dice se due array char sono uguali
class es711{ public static void main(String[]ags){ int i; int k; int j; System.out.println("inserisci dimesione array"); i= Leggi.unInt(); char[] a= new char[i]; char[] b= new char [i]; System.out.println("inserisci array 1"); for (k=0; k<=a.length-1; k++) a[k]= (char) Leggi.unChar(); System.out.println("inserisci array 2"); for (j=0; j<=a.length-1; j++) b[j]= (char) Leggi.unChar(); if ((a[k])==(b[j])) System.out.println("uguali"); else System.out.println("diversi"); } } ecco al javac mi da che e esatto quando lo eseguo inserisco gli array e dopo mi da l erroee Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at es711.main(es711.java:18) grazie di nuovo a tutti quelli che mi aiutano |
|
|
|
|
|
#18 |
|
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Nelle espressioni di accesso agli elementi di un array Java la validità dell'indice è valutata a tempo di esecuzione. Potresti scrivere array[-1000] e javac non farebbe una piega.
Il problema è qui. if ((a[k])==(b[j])) Quando termina il ciclo k vale a.length, ma l'indice massimo di un array è array.length - 1. Lo stesso per j. Non so perchè ma hai il vizietto di riciclare gli indici dei cicli In condizioni normali (quindi, salvo speciali esigenze, che qui non ci sono) un for include dichiarazione ed inizializzazione dell'indice (nel tuo codice dichiari l'indice all'esterno, lo inizializzi nel for e poi lo ricicli nell'istruzione che ho riportato sopra). Dovresti seguire la forma standard che tra l'altro migliora la leggibilità. Codice:
for(int k = 0; k < a.length; k++) {
ecc. ecc.
}
for(da 0 ad a.length -1) -> se a[i] è diverso da b[i] -> gli array non contengono gli stessi elementi -> esci dal ciclo (basta un elemento diverso a rendere diversi gli array). Per sapere, una volta terminato il ciclo, se la serie di confronti abbia dato esito positivo o negativo dovresti usare un valore di controllo che inizializzi prima di entrare nel ciclo. Ad esempio: boolean sonoUguali = true; for(...) se a[i] è diverso da b[i] -> sonoUguali = false -> break; terminato il ciclo se "sonoUguali" è "true" allora il ciclo si è "estinto" naturalmente, quindi tutti gli elementi sono uguali. se vale "false" è perchè, incontrando un elemento diverso, ha eseguito la tua istruzione condizionale che diceva "se incontri due elementi diversi imposta sonoUguali a false ed esci". Ciao. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
questonn ho capito molto...
mo lo rileggo uan decian di volte... |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: May 2003
Città: udine
Messaggi: 1625
|
[quote]Originariamente inviato da PGI
Quando termina il ciclo k vale a.length, ma l'indice massimo di un array è array.length - 1. Lo stesso per j. Non so perchè ma hai il vizietto di riciclare gli indici dei cicli In condizioni normali (quindi, salvo speciali esigenze, che qui non ci sono) un for include dichiarazione ed inizializzazione dell'indice (nel tuo codice dichiari l'indice all'esterno, lo inizializzi nel for e poi lo ricicli nell'istruzione che ho riportato sopra). Dovresti seguire la forma standard che tra l'altro migliora la leggibilità. Codice:
for(int k = 0; k < a.length; k++) {
ecc. ecc.
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:39.



















