Ciao ragazzi , sto svolgendo un'esercizio in cui dato un 'array bidimensionale , che rappresenta una matrice di Interi , deve avere questi 2 metodi:
1)Ritorna un boolean, true nel caso in cui , dato un'indice di riga della matrice , gli elementi della riga sono o tutti uguali o tutti diversi , altrimenti ritorna false;
Questo metodo funziona e lo ho fatto nel seguente modo:
public boolean tuttiUgualiODiversi(int i){
boolean n=true;
//Tutti uguali
for(int k=0;k<mat.length;k++){
for(int j=k+1;j<mat.length;j++){
if(mat[i][k]!=mat[i][j]){
n=false;
}
}
}
//Tutti diversi
if(n==false){
n=true;
for(int k=0;k<mat.length;k++){
for(int j=k+1;j<mat.length;j++){
if(mat[i][k]==mat[i][j]){
n=false;
}
}
}
}
return n;
}
2)Il secondo metodo mi funziona solo in parte : in pratica deve ritornare un'array bidimensionale “ridotto” , ovvero deve contenere solo le righe che soddisfano il metodo 1).Quindi in questo caso tutto l'array.
Ecco come lo ho fatto:
public MatriceDiInt riduci() {
int count = 0;
for (int i = 0; i < mat.length; i++) {
if (tuttiUgualiODiversi(i) == true) {
count++;
}
}
int[][] nuova = new int[count][mat.length];
int indice = 0;
for (int k = 0; k < mat.length; k++) {
if (tuttiUgualiODiversi(k) == true) {
for (int j = 0; j < mat.length; j++) {
nuova[indice][j] = mat[k][j];
}
indice++;
}
}
MatriceDiInt q = new MatriceDiInt(nuova);
return q;
}
Il metodo di per sè funziona , solo che quando lo vado a stampare , mi stampa solo i primi 2 numeri per ogni riga :Se ad esempio l'array contiene 5 elementi per riga , e le righe che soddisfano il metodo 1) sono 2 , mi stamperà le due righe ma solo con le prime 2 colonne , e non tutte .
Spero di essere stato chiaro abbastanza , grazie in anticipo!