Ciao a tutti!
Sono assolutamente nuova nel campo della programmazione e ho iniziato da poco a programmare in java.
Ho un problema che non riesco a risolvere riguardante lo svolgimento di un esercizio che mi chiede una classe per a rappresentazione del gioco del quindici.
In pratica: lo zero nella matrice rappresenta la casella vuota. Ho scritto 4 metodi per spostare a casella vuota in basso a dx, sx. I metodi ritornano la matrice a cui i ho applicati con la mossa effettuata.
Funziona tutto se applico i metodi una sola volta. Ma se dopo aver applicato uno di questi voglio applicarne un altro (ovvero fare una seconda mossa) sulla matrice restituita dal primo, nella matrice finale compare uno zero di troppo in una posizione che a me sembra del tutto casuale.
Spero di essere stata abbastanza chiara.Posto il codice che ho scritto.
codice:import java.util.ArrayList; public class Esercizio1Lezione7 { public static void main(String[] argv) { Matrice m = new Matrice(4, 4); System.out.println(Matrice.Inserisci(m)); System.out.println(m.SpostaGiu().SpostaDx()); // Problemi. } } class Matrice { int rig; int col; int[][] mat; int r_0; int c_0; public Matrice(int righe, int colonne) { mat = new int[righe][colonne]; rig = righe; col = colonne; } public static Matrice Inserisci(Matrice m) { ArrayList<Integer> controllo = new ArrayList<Integer>(); for(int i=0; i<m.rig; i++) { for (int j=0; j<m.col; j++) { m.mat[i][j]=DaiNumero(controllo, (m.rig*m.col)); } } for(int i=0; i<m.mat.length; i++) { for (int j=0; j<m.mat[i].length; j++) { if (m.mat[i][j] == 0) { m.r_0 = i; m.c_0= j; } } } return m; } public static boolean TrovaNumeroArray(int n, ArrayList<Integer> array) { for(int a=0; a<array.size(); a++) { if (array.get(a) == n) { return true; } } return false; } public static int DaiNumero(ArrayList<Integer> arrList, int estremoSup) { int num = (int)(estremoSup*Math.random()); if (TrovaNumeroArray(num, arrList) == false) { arrList.add(num); return num; } return DaiNumero(arrList, estremoSup); } public Matrice SpostaSu() { if (r_0!=0) { mat[r_0][c_0]=mat[r_0-1][c_0]; mat[r_0-1][c_0]=0; r_0=r_0-1; } Matrice m_n=new Matrice(rig, col); for(int i=0; i<mat.length; i++) { for (int j=0; j<mat[0].length; j++) { m_n.mat[i][j] = mat[i][j]; } } return m_n; } public Matrice SpostaGiu() { if (r_0!=rig-1) { mat[r_0][c_0]=mat[r_0+1][c_0]; mat[r_0+1][c_0]=0; r_0=r_0+1; } Matrice m_n=new Matrice(rig, col); for(int i=0; i<mat.length; i++) { for (int j=0; j<mat[i].length; j++) { m_n.mat[i][j] = mat[i][j]; } } return m_n; } public Matrice SpostaDx() { if (c_0!=col-1) { mat[r_0][c_0]=mat[r_0][c_0+1]; mat[r_0][c_0+1]=0; c_0=c_0+1; } Matrice m_n=new Matrice(rig, col); for(int i=0; i<mat.length; i++) { for (int j=0; j<mat[i].length; j++) { m_n.mat[i][j] = mat[i][j]; } } return m_n; } public Matrice SpostaSx() { if (c_0!=0) { mat[r_0][c_0]=mat[r_0][c_0-1]; mat[r_0][c_0-1]=0; c_0=c_0-1; } Matrice m_n=new Matrice(rig, col); for(int i=0; i<mat.length; i++) { for (int j=0; j<mat[i].length; j++) { m_n.mat[i][j] = mat[i][j]; } } return m_n; } public String FormattazioneStampaMatrice(int r, int c) { for(int i=0; i<r; i++) { for (int j=0; j<c; j++) { String perStampa = mat[i][j]+" "; System.out.print(perStampa.substring(0,2)+" "); } System.out.println(); } return " "; } public String toString() { return FormattazioneStampaMatrice(rig, col)+" "; } }

Posto il codice che ho scritto.
Rispondi quotando
d
