Pages: 1 [2] 3 4   Go Down
Print
Author Topic: Esercizio array Frastagliati  (Read 6592 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
locked
Matricola
*
Offline Offline

Posts: 26


« Reply #15 on: 31-01-2011, 14:38:57 »

ok allora ipotizzando che io abbia capito mi sfugge ancora un ultimo dettaglio che in teoria dovrebbe essere l'ultimo xD

Code:
for (int j=maxColonna-1; (j>=0) ; j--)
{
int cont=0;
for (int r=0; r < A.length  ;r++)
{
if (j<A[r].length && A[r][j].length()>max ) ------->ok capito il significato di j<A[r].length xD
{
if (cont==A.length)
{
max=A[r][j].length();
Risultato=A[r][j];
cont++;
}
}
if (cont==A.length)
{
Dentro questo ciclo io in teoria dovrei confermare che il valore associato alla stringa
                                         Risultato sia corretto quindi controllo se la colonna è completa... ma che istruzione metto
                                         qui?
}


}
}

return Risultato;
Logged
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #16 on: 31-01-2011, 14:48:34 »

Code:
public static String metodo (String [][] S)
{
int maxColonna = 0, max = 0; String p = ""; boolean trovato = false;

for (int c = 0; c < S.length; c++)
maxColonna = Math.max (maxColonna, S[c].length);

for (int j = maxColonna - 1; (j >= 0) && (!trovato); j--)
{
int cont = 0;
for (int i = 0; (i < S.length) && (!trovato); i++)
{
if ((S[i][j].length() > max) && (j < S[i].length))
{
max = S[i][j].length();  p = S[i][j];  cont ++;  
}
if (cont == S.length)  trovato = true;  
}
}
return p;
}
if (cont == S.length)  trovato = true;  ----> solo quando si troverà la colonna completa si potrà uscire dai for e ritornare la stringa dalla lunghezza maggiore della colonna in questione
« Last Edit: 31-01-2011, 14:55:04 by Luxandro » Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #17 on: 31-01-2011, 14:51:28 »

if (j<A[r].length && A[r][j].length()>max )
            {
               if (cont==A.length)      <----questo è da eliminare
               {
               max=A[r][j].length();
               Risultato=A[r][j];
               cont++;
               }
            }
Logged

"Che la Forza sia con Te"
locked
Matricola
*
Offline Offline

Posts: 26


« Reply #18 on: 31-01-2011, 14:56:36 »

ok ma curiosità.. a voi funziona? xD

A me ritorna la parola + lunga ma non considerando la colonna completa!

Se capita un esercizio tipo questo alla prova sono spacciato   boh
Logged
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #19 on: 31-01-2011, 14:58:12 »

sinceramente nn sto compilando, xkè mi immedesimo nella prova...ho sentito di ragazzi ke hanno passato l'esame pur avendo scritto programmi che avevano errori, o in compilazione o in esecuzione. deve funzionare "ideologicamente"

ti ritorna la parola più lunga della colonna più a destra?
Logged

"Che la Forza sia con Te"
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #20 on: 31-01-2011, 15:00:00 »

A me da il solito errore ---> ArrayIndexOutOfBoundsException    Dove sbaglio? 
Code:
/*Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca la parola più lunga presente nella colonna completa
più a destra di S. (Si supponga che ogni riga di S sia non vuota). */

public class Frast1
{
public static void main (String [] args)
{
String [][] S = {{"alessandro","ivan","andrea"},{"ale"},{"viola","gigi"},{"sandro","marco","flora","giuseppe"},{"pippo","fra"}};
System.out.println(metodo(S));
}

public static String metodo (String [][] S)
{
int maxColonna = 0, max = 0; String p = ""; boolean trovato = false;

for (int c = 0; c < S.length; c++)
maxColonna = Math.max (maxColonna, S[c].length);

for (int j = maxColonna - 1; (j >= 0) && (!trovato); j--)
{
int cont = 0;
for (int i = 0; (i < S.length) && (!trovato); i++)
{
if ((S[i][j].length() > max) && (j < S[i].length))
{
max = S[i][j].length();  p = S[i][j];  cont ++;
}
if (cont == S.length)  trovato = true;
}
}
return p;
}
}
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #21 on: 31-01-2011, 15:03:53 »

(S[i ][j].length() > max) && (j < S[i ].length)

l'errore dovrebbe stare qui. praticamente l'&& operatore è cortocircuitato, se la prima è falsa nn controlla la seconda, altrimenti la controlla. ci siamo? quindi praticamente cerca di controllare la lunghezza senza aver verificato che l'elemento esiste. sembra banale ma l'and funziona per ordine da sinistra a destra
Logged

"Che la Forza sia con Te"
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #22 on: 31-01-2011, 15:06:01 »

(S[i ][j].length() > max) && (j < S[i ].length)

l'errore dovrebbe stare qui. praticamente l'&& operatore è cortocircuitato, se la prima è falsa nn controlla la seconda, altrimenti la controlla. ci siamo? quindi praticamente cerca di controllare la lunghezza senza aver verificato che l'elemento esiste. sembra banale ma l'and funziona per ordine da sinistra a destra

Hai ragione, thx  [Emoticon] Asd
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
locked
Matricola
*
Offline Offline

Posts: 26


« Reply #23 on: 31-01-2011, 15:06:41 »

no mi da solo la stringa più lunga di tutta la matrice frastagliata... di guardare quelle a destra non ne ha proprio intenzione xD
Logged
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #24 on: 31-01-2011, 15:09:29 »

perdonami se allungo il brodo ma riposta il codice che stai usando corretto così vediamo
Logged

"Che la Forza sia con Te"
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #25 on: 31-01-2011, 15:22:12 »

Nell'attesa di risolvere l'esercizio ne posto di seguito un altro
Code:
/* Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di stringhe, e
restituisca un boolean che indichi se esistono due righe compatibili in A. Due righe r1 e r2 si dicono
compatibili se esiste una stringa in r1 e contemporaneamente la sua inversa in r2 */

public static boolean metodo (String [][] A)
{
int maxColonna = 0, y;
for (int g = 0; g < A.length; g++)
            maxColonna = Math.max (maxColonna, A [g].length);

for (int i = 0; i < A.length; i++)
for (int j = 0; j < maxColonna; j++)
{
if ((j < A[i].length) && (A[i + 1][j] != null))
for (int a = i + 1; a < A.length; a++)
{
for (int b = 0; b < A [i].length; b++)
{
y = A [a][b].length();   char [] c = A [a][b].toCharArray();  System.out.println(c);  String x = "";
for (int k = y - 1; k >= 0; k--)     x += c [k];
if (A [i][j].equals(x))   return true;
}
}
}
return false;
}
Ps.: solito errore ---> java.lang.ArrayIndexOutOfBoundsException
Probabilmente sbaglio quando inizializzo a = i + 1, poichè quando la dimensione successiva ad i non è presente, vado fuori dall'array...
« Last Edit: 31-01-2011, 15:24:04 by Luxandro » Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #26 on: 31-01-2011, 15:28:10 »

secondo me poteva tradurre questa richiesta semplicemente nel cercare una stringa e la sua inversa in un'altra riga diversa dalla prima. in questo caso nn devi scorrere per colonne, nn hai bisogno di cercare la maxcolonna. quindi nel ciclo della j metti semplicemente j<A[i ].length e togli quell'if subito sotto. il tochararray è un metodo che sinceramente nn uso, nn capisco a cosa serva la print, però credo che in teoria funzioni con quel piccolo ritocco...
Logged

"Che la Forza sia con Te"
locked
Matricola
*
Offline Offline

Posts: 26


« Reply #27 on: 31-01-2011, 15:28:52 »

eccolo:
Code:
public static String Es (String [][] A )
{
int maxColonna=0;
String Risultato="";
int max=0;
boolean trovato=false;

for (int c=0; c<A[0].length; c++)
{
maxColonna=Math.max(maxColonna,A[c].length);
}



for (int j=maxColonna-1; (j>=0) && (!trovato) ; j--)
{
int cont=0;
for (int r=0; (r < A.length) && (!trovato)  ;r++)
{
if ((j<A[r].length) && (A[r][j].length())>max )
{

max=A[r][j].length();
Risultato=A[r][j];
cont++;

}
if (cont == A.length)
{
trovato=true;
}



}
}

return Risultato;

}
}
Logged
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #28 on: 31-01-2011, 15:31:42 »

secondo me poteva tradurre questa richiesta semplicemente nel cercare una stringa e la sua inversa in un'altra riga diversa dalla prima. in questo caso nn devi scorrere per colonne, nn hai bisogno di cercare la maxcolonna. quindi nel ciclo della j metti semplicemente j<A[i ].length e togli quell'if subito sotto. il tochararray è un metodo che sinceramente nn uso, nn capisco a cosa serva la print, però credo che in teoria funzioni con quel piccolo ritocco...

La print era solo di verifica  [Emoticon] Asd

cmq si, bisogna interpretare bene l'esercizio, in fondo la difficoltà della prima prova sta quasi tutta li.....
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #29 on: 31-01-2011, 15:32:54 »

Code:
for (int j=maxColonna-1; (j>=0) && (!trovato) ; j--)
{
                       max=0;           <----- :yoh scoperto l'inghippo! devi resettare la lunghezza max al cambio di colonna. dovrebbe essere questa la cosa per far funzionare il codice
int cont=0;
for (int r=0; (r < A.length) && (!trovato)  ;r++)

x questo pensavo che il mio codice fosse leggermente meglio. xkè sei sicuro che vai a cercare la stringa più lunga solo nella colonna completa più a destra precedentemente
« Last Edit: 31-01-2011, 15:35:51 by StephCT » Logged

"Che la Forza sia con Te"
Pages: 1 [2] 3 4   Go Up
Print
Jump to: