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

Posts: 26


« Reply #30 on: 31-01-2011, 15:35:21 »

ahaha vero xD basta finalmente risulta!

certo io non avrei mai fatto questo tipo di ragionamento! troppo casinoo! spero solo che alla prova siano + semplici xD

cmq grazie x l'aiuto ragazzi!  almeno posso passare a qualche altro esercizio!  ok
Logged
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #31 on: 31-01-2011, 15:46:43 »

Code:
public static boolean metodo (String [][] A)
{
for (int i = 0; i < A.length; i++)
for (int j = 0; j < A[i].length; j++)
for (int a = i + 1; a < A.length; a++)
for (int b = 0; b < A [i].length; b++)
{
int y = A [a][b].length();  char [] c = A [a][b].toCharArray();  String x = "";
for (int k = y - 1; k >= 0; k--)     x += c [k];
if (A [i][j].equals(x))   return true;
}
return false;
}
L'ho corretto ma da sempre lo stesso errore...il problema credo sia nel
Code:
for (int a = i + 1; a < A.length; a++)
Logged

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

Gender: Male
Posts: 417



« Reply #32 on: 31-01-2011, 16:01:05 »

nn credo sia quello il problema xkè anche se l'indice i arriva a rappresentare l'ultima riga, assegnando la a i+1, controlla la condizione e nn ci entra quindi....se fosse quello il problema lo potresti risolvere facendo la condizione della i come i<A.length-1. poi nn so esattamente quale potrebbe essere il problema, mi pare tutto corretto. sicuramente puoi sistemare il codice con il solito booleano per avere un unico punto di ritorno, poi invece di dichiarare la y, puoi fare nel ciclo k = c.length-1...se ti dovesse dare problemi ancora, allora prova questa mia soluzione:
Code:
public static boolean metodo (String [][] A)
{
boolean trovata=false;
for (int i = 0; i < A.length-1 && !trovata; i++)
for (int j = 0; j < A[i].length && !trovata; j++)
for (int a = i + 1; a < A.length && !trovata; a++)
for (int b = 0; b < A [i].length && !trovata; b++)
{
boolean diverse=false;
if(A[i][j].length()==A[a][b].length())
for(int k=0;k<A[i][j].length() && !diverse;k++)
if(A[i][j].charAt(k)!=A[a][b].charAt(A[a][b].length()-1-k))
diverse=true;
if(!diverse)
trovata=true;
}
return trovata;
}

in pratica prima vede se le lunghezze sono le stesse, poi entra nel ciclo e se sono l'una l'inversa dell'altra allora si esce fuori e si ritorna
Logged

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

Posts: 307



« Reply #33 on: 31-01-2011, 16:09:48 »

Mi da errore anche con il tuo codice e la cosa assurda è che ho questo tipo di problema quasi in ogni metodo in cui si deve inizializzare un indice al successivo di un altro ---> int a = i + 1

questo codice ne è un esempio

Code:
/* Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di Stringhe e
restituisca un boolean che indichi se esiste in A una colonna contenente una stringa e la sua
proiezione.(Attenzione alle stringhe mancanti!). La proiezione di una stringa s e' la stringa s1
ottenuta sostituendo ogni carattere in s con il carattere successivo o precedente.
Es.: s = "depg"  s1 = "cdof". */

public static boolean metodo (String [][] A)
{
int maxColonna = 0;

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

for (int j = 0; j < maxColonna; j++)
for (int i = 0; i < A.length; i++)
if (j < A[i].length)
{
char [] x = A[i][j].toCharArray();  String s1 = ""; String s2 = "";
for (int w = 0; w < x.length; w++)
{
s1 += (x[w] + 1);  s2 += (x[w] - 1);
}
for (int r = i + 1; r < A.length; r++)
if (A[r][j].length() == A[i][j].length())
if ((A[r][j].equals(s1)) || (A[r][j].equals(s2))) return true;
}
return false;
}

ps.: non capisco proprio in cosa sbaglio  testate  (ho provato anche con r < A.length - 1 )
« Last Edit: 31-01-2011, 16:12:13 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 #34 on: 31-01-2011, 16:16:47 »

for (int i = 0; i < A.length; i++)
      for (int j = 0; j < A[i ].length; j++)
         for (int a = i + 1; a < A.length; a++)
            for (int b = 0; b < A [i ].length; b++)


è affettuoso perdonami xD tu sei #@!!01Z#@!!@$^ e io più di te  yoh
b deve essere minore di A[a].length non di A[i ].length XD ovvio che fa fuori dalle dimensioni perchè si associa sempre alla prima dimensione. infatti anche nel nuovo codice che hai postato

for (int r = i + 1; r < A.length; r++)
                  if (A[r][j].length() == A[i ][j].length())

qui devi controllare che l'elemento A[r][j] esista con if(j<A[r].length)
Logged

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

Posts: 307



« Reply #35 on: 31-01-2011, 16:21:33 »

STATO D'ANIMO SUCCESSIVO ALLA SCOPERTA DELL'ERRORE --->  testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate testate
Logged

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

Posts: 307



« Reply #36 on: 31-01-2011, 16:28:12 »

Altro errore nell'esercizio della "proiezione", il casting a char nella creazione delle stringhe s1 e s2 
Code:
s1 += (char)(x[w] + 1);  s2 += (char)(x[w] - 1);
Logged

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

Gender: Male
Posts: 417



« Reply #37 on: 31-01-2011, 16:36:39 »

allora in maniera compatta così come fai te nn saprei come castarla in maniera corretta quindi per risolvere in maniera sicura la cosa, fai una variabile char in cui ci metti il carattere e poi questa variabile la concateni alla stringa che è un operazione sicuramenta valida
Logged

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

Posts: 307



« Reply #38 on: 31-01-2011, 16:38:26 »

allora in maniera compatta così come fai te nn saprei come castarla in maniera corretta quindi per risolvere in maniera sicura la cosa, fai una variabile char in cui ci metti il carattere e poi questa variabile la concateni alla stringa che è un operazione sicuramenta valida

Ho provato e in output da esito positivo!   yoh
Logged

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

Gender: Male
Posts: 398



« Reply #39 on: 31-01-2011, 20:49:33 »

Ragazzi ma mi spiegate perche nell'esercizio precedente (quello della stringa + grande nella colonna completa a dx) avete messo cont++ ? nn ho cpt più che altro perchè il cont++ sta dentro l'if : if(A[i ][j].length()>max && j<A[i ].length) e non fuori...Secondo me dovrebbe stare fuori perchè cont++ si deve aggiornare A.length volte e non solo quando entra dentro l'if , non so se mi spiego....GRAZIE
« Last Edit: 31-01-2011, 21:03:30 by salvopuglisi » Logged
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #40 on: 31-01-2011, 21:02:34 »

cosa si intende per colonna completa?
Logged

Aliens Exist
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #41 on: 31-01-2011, 21:12:15 »

cosa si intende per colonna completa?

si intende la colonna dove sono presenti tutti gli elementi, cn gli array frastagliati capita che le righe non abbiano tutte la stessa lunghezza, quindi capita di trovare un elemento e scorrendo la riga quello sotto nn c'è, poi sotto ancora ritroviamo un elemento ecc...


Ragazzi ma mi spiegate perche nell'esercizio precedente (quello della stringa + grande nella colonna completa a dx) avete messo cont++ ? nn ho cpt più che altro perchè il cont++ sta dentro l'if : if(A[i ][j].length()>max && j<A[i ].length) e non fuori...Secondo me dovrebbe stare fuori perchè cont++ si deve aggiornare A.length volte e non solo quando entra dentro l'if , non so se mi spiego....GRAZIE

il cont serve a dirci se la colonna è completa xkè se è uguale alla lunghezza di una colonna completa in quella matrice allora è la famosa colonna completa più a destra. in effetti dovrebbe stare in mezzo ai due controlli, cioè se j<A[i ].length è vera il contatore sale xkè esiste l'elemento nella colonna, poi si controlla la lunghezza della stringa
Logged

"Che la Forza sia con Te"
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #42 on: 31-01-2011, 21:21:46 »

non dovrebbe essere cosi ?? l'ho fatto in maniera approssimativa senza il contenuto del for
Code:
for(colonne)
   cont=0;
     {
        for(righe)
           {
               if(A[i][j].length()>max && j<A[i].length)
                 {
                     max=A[i][j].length();
                     p=A[i][j];
                  }

                 cont++;

                 if(cont==A.length)
                 return p;
             }
         }
Logged
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #43 on: 31-01-2011, 21:27:13 »

quindi se ho
int [][] a= new int [5][];

a[0]=new int [5]   sarebbe questa la colonna completa? cioe quella che ha colonne uguali alle righe?
Logged

Aliens Exist
StephCT
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #44 on: 01-02-2011, 00:54:26 »

no però se:
int [][] a= new int [5][];
A[0]=new int[4];
A[1]=new int[5];
A[2]=new int[3];
A[3]=new int[4];
A[4]=new int[2];

le colonne complete sono quelle in cui usando l'indice j, vanno da 0 a 2, cioè le prima tre colonne. andando avanti vedi che l'ultima riga è meno lunga delle altre, anche se in realtà sn tutte diverse...è più chiaro ora?
Logged

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