grazie mille desa per i tuoi preziosi consigli
Ho modificato l'algoritmo come segue:
codice:
//controlla che gli accoppiamenti siano tutti diversi
public static boolean verificaCoppie(int[][]matrice2){
for(int i=0;i<matrice2.length-1;i++){
for(int j=0;j<matrice2[0].length;j+=2){
for(int x=i+1;x<matrice2.length-1;x++){
for(int y=0;y<matrice2[0].length;y+=2){
if(i!=x && j!=y && matrice2[i][j]==matrice2[x][y]){
if (matrice2[i][j] == matrice2[x][y] && matrice2[i][j + 1] == matrice2[x][j + 1])
{
return false;
}
}
}
}
}
}
return true;
}
però ogni tanto mi da ancora qualche errore. Non sempre, però ogni tanto si quindi credo ci sia ancora qualcosina che non va
sto eseguendo più volte il programma per capire dove fa l'errore e con che "logica" capita. Ti posto l'intero programma cosi magari puoi provare pure tu
codice:
public class calendario{
public static void main(String[] args){
// creo la matrice con il numero di righe e colonne definite
int matrice[][] = new int[5][8];
do{
matrice=creaMatrice(matrice);
} while(verificaCoppie(matrice)==false);
for(int i=0;i<matrice.length;i++){
for(int j=0;j<matrice[0].length;j++){
System.out.print("["+matrice[i][j]+"] ");
}
System.out.println();
}
}
public static int[][]creaMatrice(int[][]matrice){
// cliclo l'array bidimensionale
for (int i = 0; i < matrice.length; i++) {
for (int j = 0; j < matrice[0].length; j++) {
// Inizio controllo numeri diversi per riga
boolean unico;
do
{
unico = true;
matrice[i][j] = (int)(Math.random()*8)+1;
for (int x = 0; x < j; x++)
{
if (matrice[i][j] == matrice[i][x])
{
unico = false;
}
}
} while (!unico);
}
}
return matrice;
}
//controlla che gli accoppiamenti siano tutti diversi
public static boolean verificaCoppie(int[][]matrice2){
for(int i=0;i<matrice2.length-1;i++){
for(int j=0;j<matrice2[0].length;j+=2){
for(int x=i+1;x<matrice2.length-1;x++){
for(int y=0;y<matrice2[0].length;y+=2){
if(i!=x && j!=y && matrice2[i][j]==matrice2[x][y]){
if (matrice2[i][j] == matrice2[x][y] && matrice2[i][j + 1] == matrice2[x][j + 1])
{
return false;
}
}
}
}
}
}
return true;
}
}