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:

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;
 }
}
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.
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" ??