Ho riaperto qui
Salve, credo che per questo problema ci voglia una persona con più conoscenza in campo. Allora, se vi scrivo è perchè ho trovato una stranezza usando Eclipse per compilare ed eseguire un codice che fa parte di una traccia d'esame, infatti fra poco avrò l'esame all'università e vorrei togliermi gli ultimi dubbi su quanto riguarda i fondamenti di Java.
Il programma è questo:
In pratica il programma restituisce "OK" se la somma degli elementi in posizione pari è uguale alla somma degli elementi in posizione dispari di ogni riga della matrice "m[][]"...il risultato è stato stranamente "NON OK" perchè mi dice che nella terza riga le somme degli elementi dispari e pari non sono uguali.codice:public class PariDisp{ public static void main(String [] args){ double [] [] mat = new double[][]{{1.0,2.0,2.1,1.1}, {1.0,1.5,1.5,1.0}, {1.1,3.3,3.2,1.0}, {1.1,2.0,2.0,1.1}}; if(metodo2(mat)) System.out.println("OK"); else System.out.println("NON OK"); } public static double metodo1(double[] v, int i){ double s=0; for(int k=i;k<v.length;k+=2) s+=v[k]; return s; } public static boolean metodo2(double [] [] m){ boolean verificato=true; for(int k=0;k<m.length && verificato;k++) if(metodo1(m[k],0)!=metodo1(m[k],1)) verificato=false; return verificato; } }
Allora per capire il problema ho fatto una prova di collaudo, cioè ho riscritto il codice con il "System.out.print" nella zona interessata per vedere qual'era l'errore:
codice:public class PariDisp { public static void main(String [] args){ double[][]mat=new double[][]{{1.0,2.0,2.1,1.1}, {1.0,1.5,1.5,1.0}, {1.1,3.3,3.2,1.0}, {1.1,2.0,2.0,1.1}}; if(metodo2(mat)) System.out.println("OK"); else System.out.println("NON OK"); } public static double metodo1(double[] v,int i){ double s=0; for(int k=i;k<v.length;k+=2){ s+=v[k]; System.out.println(v[k]); } System.out.println("La somma è uguale a "+s); return s; } public static boolean metodo2(double [][]m){ boolean verificato=true; for(int k=0;k<m.length && verificato;k++) if(metodo1(m[k],0)!=metodo1(m[k],1)) verificato=false; return verificato; } }
Ed ecco il risultato in Eclipse:
1.0
2.1
La somma è uguale a 3.1
2.0
1.1
La somma è uguale a 3.1
1.0
1.5
La somma è uguale a 2.5
1.5
1.0
La somma è uguale a 2.5
1.1
3.2
La somma è uguale a 4.300000000000001
3.3
1.0
La somma è uguale a 4.3
NON OK
Come viene fuori quel "4.300000000000001" ??

Rispondi quotando
