Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Stardust on 01-09-2010, 14:56:50



Title: matrice problema
Post by: Stardust on 01-09-2010, 14:56:50
scusate avrei un problema: devo verificare se in una colonna di una matrice FRASTAGLIATA di stringhe ne esistano 3 che terminano con lo stesso carattere finale. Io ho abbozzato qualcosa del genere però esce fuori dal range:

Code:
public static boolean metodo(String[][]A){
int cont=0;
for(int i=0; i<A.length; i++){
for(int j=0; j<A[i].length; j++){
cont=0;
for(int k=0; k<A.length; k++){

if(A[i][j].charAt(A[i][j].length()-1) == A[i][k].charAt(A[i][k].length()-1))
cont++;
if(cont==3)
         return true;
}
}
}
         
return false;
};


Title: Re:matrice problema
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 01-09-2010, 18:05:28
Il tuo metodo verifica la condizione SULLE RIGHE e non sulle colonne.
Ti ricordo che il primo indice di un array indica la riga e il secondo la colonna.

Il problema del sollevamento dell'eccezione ArrayIndexOutOfBounds è veramente secondario in questo codice e non ha senso tentare di risolverlo se prima non si risolve quello che ti ho specificato all'inizio del messaggio.

Ciao .ciaociao.


Title: Re:matrice problema
Post by: Stardust on 01-09-2010, 22:16:25
Grazie reversengineer credo di avere risolto in parte il problema.. ora dovrebbe soltanto esserci l' errore dell' eccezione! Ho provato con l' if ma nn capisco dove sbaglio!Qualche consiglio?!

Code:
public static boolean metodo(String[][]A){
int cont=0;
for(int j=0; j<A[0].length; j++){
for(int i=0; i<A.length; i++){
cont=0;
if(i<A[j].length)
                                   
for(int k=0; k<A[i].length; k++){

if(A[i][j].charAt(A[i][j].length()-1) == A[i][k].charAt(A[i][k].length()-1))
cont++;
if(cont==3)
         return true;
}
}
}
         
return false;
}


Title: Re:matrice problema
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 02-09-2010, 12:34:41
In questa condizione:
Code:
if(i<A[j].length)
gli indici i e j andrebbero scambiati, così:
Code:
if(j<A[i].length)
ma questo non risolverebbe ancora il problema del frastagliamento dell'array bidimensionale.

In questi casi, la cosa migliore da fare, è capire qual è il massimo indice di "colonna" a cui fermare "j" del tuo primo ciclo for. Questo massimo può essere trovato con una lettura di tutte le length di ciascuna riga con un banale ciclo for o while.

Dopodiché si usa un codice simile al tuo, in cui però la condizione che ho citato a inizio messaggio va fatta dentro al ciclo che itera su "k" invece che fuori da esso.

Buona giornata .ciaociao.


Title: Re:matrice problema
Post by: Stardust on 02-09-2010, 13:50:21
mmm.. cmq un altra cosa che mi viene in mente potrebbe essere anche per il fatto che sto cercando di accedere a una locazione della matrice che non eiste... Perchè io la parte del main l' ho fatta così:

Code:
public static void main(String[]args){
String [][]A={{"casa", "sole"},
                   {"mare"},
                    {"msi" , "notebook", "series"},
    {"eserciziO", "numero2"}};


Title: Re:matrice problema
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 03-09-2010, 14:28:30
mmm.. cmq un altra cosa che mi viene in mente potrebbe essere anche per il fatto che sto cercando di accedere a una locazione della matrice che non eiste... Perchè io la parte del main l' ho fatta così:

Code:
public static void main(String[]args){
String [][]A={{"casa", "sole"},
                   {"mare"},
                    {"msi" , "notebook", "series"},
    {"eserciziO", "numero2"}};
L'array che passi è perfettamente valido. Il frastagliamento delle sue righe è previsto dall'esercizio.

Hai provato a implementare la ricerca della lunghezza massima fra le lunghezze di tutte le righe? .penso

Ciao.


Title: Re:matrice problema
Post by: Stardust on 03-09-2010, 14:32:10
sisi qll che ho fatto fin ora è così:

Code:
public static boolean metodo(String[][]A){
int cont=0;
int max=0;
for(int x=0; x<A.length; x++){
if(A.length>max)
max=A.length;
}
System.out.println(max);      //colonna massima
for(int j=0; j<max; j++){
for(int i=0; i<A.length; i++){
cont=0;

if(A[i][j] == null) {
A[i][j]=null;
//System.out.println("vuolo");

}
else {
System.out.println(A[i][j].charAt(A[i][j].length()-1));
}

for(int k=0; k<A[i].length-1; k++){

// System.out.println(A[i][k].charAt(A[i][k].length()-1));
if(j<A[i].length) 


if(A[i][j].charAt(A[i][j].length()-1) == A[i][k].charAt(A[i][k].length()-1))
cont++;
if(cont==3)
         return true;
     
}
}
}
return false;