Salve a tutti!
Ho un problemino da risolvere:
Calcolare la somma dei contenuti delle righe di una matrice tranne le ultime celle, stampando proprio nelle ultim i risultati delle somme delle celle precedenti.
Vi metto il mio codice e vi indico dove sta l'errore:
codice:
public class SommaRighe {
int matrice[][];
int colonne=5, righe=5;
SommaRighe(){
matrice=new int[righe][colonne];
}
public void Carica(){
for(int r=0;r<righe;r++){
for(int c=0;c<colonne-1;c++){
matrice[r][c]=(int)(Math.random()*10);
}
}
//stampo la matrice originale
for(int r = 0; r<righe; r++){
for(int c = 0; c<colonne; c++){
System.out.print(matrice[r][c]+" ");
}
System.out.println();
}
}
public void SommaRighe(){
int somma=0, r = 0, c = 0;
for(r=0;r<righe;r++){
for(c=0;c<colonne-1;c++){
somma+=matrice[r][c];
matrice[r][4]=somma;
}
}
//errore
for(r=4;r<righe;r--){
for(c=4;c<colonne;c--){
somma=matrice[r][4]-matrice[r-1][4];
matrice[r][4]=somma;
}
}
System.out.println("<<<Righe sommate>>>");
for(r = 0; r<righe; r++){
for(c = 0; c<colonne; c++){
System.out.print(matrice[r][c]+" ");
}
System.out.println();
}
}
}
public class Main {
public static void main(String[] args) {
SommaRighe sr = new SommaRighe();
sr.Carica();
sr.SommaRighe();
}
}
Da quello che potete notare, cioè:
codice:
for(r=4;r<righe;r--){
for(c=4;c<colonne;c--){
somma=matrice[r][4]-matrice[r-1][4];
matrice[r][4]=somma;
}
Cerco di fare la differenza per ottenere il risultato giusto negli elementi della 4 colonna, poichè prima del ciclo vengono in questo modo:
codice:
<<<Righe sommate>>>
5 3 2 0 10
4 5 2 1 22
2 8 1 4 37
3 9 4 6 59
8 6 3 8 84
Cercando di fare 84-59, 59-37 e 37-22 per ottenere la somma giusta.
In output mi viene questo se compilo il programma:
codice:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at sommarighe.SommaRighe.SommaRighe(SommaRighe.java:38)
at sommarighe.Main.main(Main.java:9)
Java Result: 1
Grazie in anticipo a quelli che mi potranno aiutare.
Jan