View Full Version : [JAVA] Scambiare 2 righe di una matrice
marcoqwertyuiop
05-01-2016, 23:47
Salve, ho questo codice per scambiare due righe di una matrice, ma perchè non funziona?
class Prova {
public static void scambia(int [][] a) {
int temp;
for (int i = 0; i<a.length; i++) {
for (int j = 0; j<a[i].length; j++) {
temp = a[0][j];
a[0][j] = a[1][j];
a[1][j] = temp;
}
}
}
public static void main(String[] args) {
int [][] a = {
{1,2},
{2,3}
};
scambia(a);
for (int i = 0; i<a.length; i++) {
for (int j = 0; j<a[i].length; j++)
System.out.print(a[i][j]+ " ");
System.out.println();
}
}
}
hot_blaster
06-01-2016, 08:41
Non compila? Se si, puoi postare l'errore?
Genera un'eccezione? Se si, puoi postarla assieme allo stack?
Fornisce un risultato scorretto? Se si, che risultato?
class Prova {
public static void scambia(int [][] a) {
int temp;
for (int i = 0; i<a.length; i++) {
for (int j = 0; j<a[i].length; j++) {
temp = a[0][j];
a[0][j] = a[1][j];
a[1][j] = temp;
}
}
}
Nella funzione scambia() servono veramente due for? Prova a pensarci bene. ;)
marcoqwertyuiop
06-01-2016, 12:13
Non compila? Se si, puoi postare l'errore?
Genera un'eccezione? Se si, puoi postarla assieme allo stack?
Fornisce un risultato scorretto? Se si, che risultato?
Compila ed esegue correttamente, ma anche dopo l'ivocazione del metodo la prima riga non viene scambiata con la seconda, cioè la matrice resta invariata.
Compila ed esegue correttamente, ma anche dopo l'ivocazione del metodo la prima riga non viene scambiata con la seconda, cioè la matrice resta invariata.
Sottoscrivo il suggerimento di @VICIUS ;) Se presupponi che la matrice sia bidimensionale con la prima dimensione pari a 2 non serve il ciclo esterno, che, anzi, è quello che fa danni. Se stampi la prima cella delle due righe dopo il ciclo interno te ne renderai subito conto.
hot_blaster
06-01-2016, 13:23
Il primo for (quello con i) è inutile e dannoso, il fatto che la matrice sia quadrata fa si che lo scambio venga eseguito due volte, quindi nessuno scambio.
Questa soluzione è valida e soprattutto molto semplificata, visto che devi scambiare direttamente le righe:
public static void scambia(int[][] a) {
int[] temp;
temp = a[0];
a[0] = a[1];
a[1] = temp;
}
marcoqwertyuiop
06-01-2016, 14:57
Ok, grazie!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.