Pages: [1] 2   Go Down
Print
Author Topic: Esercizio prova sui metodi  (Read 3169 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Luckino
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 107


Io nn sono il migliore ma nessuno è migliore di me


« on: 25-01-2010, 15:53:56 »

Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca una matrice S’ ottenuta da S eliminando tutti i caratteri ‘x’ ed ‘y’.

posto il codice:
Code:
public class esercizio7
{
public static String[][] metodo(String S[][])
{
String[][] A=new String[S.length][S[0].length];
for(int i=0;i<S.length;i++)
{
for(int j=0;j<S[i].length;j++)
{
for(int k=0;k<S[i][j].length();k++)
{
if(S[i][j].charAt(k)=='x')
{
S[k]=null;
A[k]=S[k];
}

}
A[i][j]=S[i][j];
}
}
return A;
}
public static void main(String[] args)
{
String[][] S={{"sdfhx","sjdhfaxx","sduhi"},
                    {"kfhjjj","dhkxfjhg","asjdhg"},
    {"dlkjhgks","xsxkdjhf","dsahkx"}};
   
String[][] A=metodo(S);
for(int i=0;i<A.length;i++)
{
for(int j=0;j<A[i].length;j++)
System.out.println(A[i][j]);
}
}
}

ed ora posto l'errore in fase di esecuzione:
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at esercizio7.metodo(esercizio7.java:14)
at esercizio7.main(esercizio7.java:30)

praticamente mi esce dall'array e questo mi succede anche quando,come in questo caso, la matrice non è frastagliata!!!aspetto risposte... pray pray pray
Logged
Flyer
Apprendista Forumista
**
Offline Offline

Posts: 100



« Reply #1 on: 25-01-2010, 18:08:12 »

Ciao non ho guardato attentamente il tuo codice ma presuppongo che l'errore sia in questo if.

Code:
if(S[i][j].charAt(k)=='x')
{
S[k]=null;
A[k]=S[k];
}


Ecco comunque la mia soluzione.

Code:
public class Esercizio
{
public static String[][] metodo(String[][] S)
{
String[][]S1=new String[S.length][];
for(int i=0;i<S.length;i++)
{
S1[i]=new String[S[i].length];
for(int y=0;y<S[i].length;y++)
{
S1[i][y]="";
for(int z=0;z<S[i][y].length();z++)
if(S[i][y].charAt(z)!='x' && S[i][y].charAt(z)!='y')
S1[i][y]+=S[i][y].charAt(z);

}
}
return S1;
}

public static void main(String[]args)
{
String[][] A={
    {"Abcxf","xyyyh","ciao"},
    {"uxuux","roxma"},
    {"xxxciaydx"},
    {"hhh","psdxyd","xssy"}
          };
String[][] A1=metodo(A);
for(int i=0;i<A1.length;i++)
{ for(int y=0;y<A1[i].length;y++)
System.out.print(A1[i][y]+" ");
System.out.println();
}
}
}
Logged
Rolex
Matricola
*
Offline Offline

Posts: 22


« Reply #2 on: 25-01-2010, 18:16:30 »

Code:
  public static String[][] riduci(String[][] S){
   int i,k,h;
   String[][] sNuovo = new String [S.length][];
                //appoggio è la variabile che contiene la stringa filtrata
   String appoggio=new String();
   for (i=0;i<S.length;i++){
   sNuovo[i]=new String[S[i].length];
   for(k=0;k<S[i].length;k++){
   appoggio="";
   for(h=0;h<S[i][k].length();h++){
   if (S[i][k].charAt(h)!='x' && S[i][k].charAt(h)!='y') appoggio+=S[i][k].charAt(h);
   }
   sNuovo[i][k]=appoggio;
   }
   }
   return sNuovo;
   }

Ecco come l'ho impostato





EDIT: che in pratica è uguale al codice del collega Flyer, tranne per la variabile d'appoggio
« Last Edit: 25-01-2010, 18:18:34 by Rolex » Logged
stallclinton
Matricola
*
Offline Offline

Posts: 61


« Reply #3 on: 25-01-2010, 18:37:28 »

Ma utilizzare la funzione replace?
Logged
Luckino
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 107


Io nn sono il migliore ma nessuno è migliore di me


« Reply #4 on: 25-01-2010, 18:38:04 »

grazie mille ho risolto!!!
Logged
stallclinton
Matricola
*
Offline Offline

Posts: 61


« Reply #5 on: 25-01-2010, 18:42:50 »

Code:
String[][] m={{"Abcxf","xyyyh","ciao"},
{"uxuux","roxma"},
{"xxxciaydx"},
{"hhh","psdxyd","xssy"}};


for (int i = 0; i < m.length; i++) 
{
for(int j=0; j < m[i].length; j++){

System.out.println(m[i][j].replace("x","").replace("y",""));

   }
}

Così mi pare più elegante, ho lasciato l'output giusto per vedere...
Logged
Luckino
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 107


Io nn sono il migliore ma nessuno è migliore di me


« Reply #6 on: 25-01-2010, 18:47:53 »

Code:
String[][] m={{"Abcxf","xyyyh","ciao"},
{"uxuux","roxma"},
{"xxxciaydx"},
{"hhh","psdxyd","xssy"}};


for (int i = 0; i < m.length; i++) 
{
for(int j=0; j < m[i].length; j++){

System.out.println(m[i][j].replace("x","").replace("y",""));

   }
}

Così mi pare più elegante, ho lasciato l'output giusto per vedere...

è piu elegante ma nel compito quel metodo non lo puoi usare...
Logged
Flyer
Apprendista Forumista
**
Offline Offline

Posts: 100



« Reply #7 on: 25-01-2010, 18:49:55 »

Certo sicuramente molto comodo il replace ma credo proprio che il Prof non accetti una soluzione del genere  nono
Logged
stallclinton
Matricola
*
Offline Offline

Posts: 61


« Reply #8 on: 25-01-2010, 18:51:17 »

Certo sicuramente molto comodo il replace ma credo proprio che il Prof non accetti una soluzione del genere  nono

Uff...ma quindi vuole complicarci la vita? a che pro.. boh

A proposito, ma cosa possiamo e non possiamo usare?
Logged
isuccia89
Apprendista Forumista
**
Offline Offline

Gender: Female
Posts: 481



« Reply #9 on: 25-01-2010, 18:53:48 »

Uff...ma quindi vuole complicarci la vita? a che pro.. boh

A proposito, ma cosa possiamo e non possiamo usare?

penso ke se nn possiamo usare qualcosa lo dirà direttamente lui....  testate
Logged

Se incontrerai qualcuno persuaso di saper tutto e di esser capace di far tutto non potrai sbagliare, costui è un imbecille! (Confucio)
Luckino
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 107


Io nn sono il migliore ma nessuno è migliore di me


« Reply #10 on: 25-01-2010, 18:54:28 »

Certo sicuramente molto comodo il replace ma credo proprio che il Prof non accetti una soluzione del genere  nono

non si può...infatti chiede di "scrivere un metodo" e non scrivere il main con un metodo già fatto...sarebbe troppo semplice risolvere l'esercizio in 2 righe di codice!!mi sembra strano che il prof non l'abbia detto a lezione!!
Logged
stallclinton
Matricola
*
Offline Offline

Posts: 61


« Reply #11 on: 25-01-2010, 19:02:02 »

Sì in breve lui vuole che riusciamo a capire cosa c'è dietro ad un replace().

Comunque se può consolarvi nel compito non c'è nemmeno scritto di farlo in java ... [Emoticon] Rosik Asd

ps con charAt() ti complichi un po' la vita ma è pur sempre un metodo...
« Last Edit: 25-01-2010, 19:05:09 by stallclinton » Logged
Luckino
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 107


Io nn sono il migliore ma nessuno è migliore di me


« Reply #12 on: 25-01-2010, 19:07:02 »

Certo sicuramente molto comodo il replace ma credo proprio che il Prof non accetti una soluzione del genere  nono

Uff...ma quindi vuole complicarci la vita? a che pro.. boh

A proposito, ma cosa possiamo e non possiamo usare?

allora... il testo parla chiaro:
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca una matrice S’ ottenuta da S eliminando tutti i caratteri ‘x’ ed ‘y’.

devi creare tu il metodo che tolga alle stringhe i caratteri x ed y.non dice di instanziare e riempire un array bidimensionale di stringhe e farlo stampare
Code:
String[][] m={{"Abcxf","xyyyh","ciao"},
{"uxuux","roxma"},
{"xxxciaydx"},
{"hhh","psdxyd","xssy"}};


for (int i = 0; i < m.length; i++)  
{
for(int j=0; j < m[i].length; j++){

System.out.println(m[i][j].replace("x","").replace("y",""));

   }
}
... è come se il metodo replace dovessi implementarlo tu!!!quest esame l'ho fatto più di una volta e vi posso assicurare che è cosi!!
Logged
stallclinton
Matricola
*
Offline Offline

Posts: 61


« Reply #13 on: 25-01-2010, 19:09:59 »

Sì ho capito, ma il metodo replace è fatto con charAt() ? che a sua volta non è altro che un metodo...
A questo punto facciamolo in assembly.

Io discuto solo il fatto che mi trovo un po' spaesato, cioè va bene che devo simulare il metodo replace, però vorrei capire qual'è la giusta strada, perché ripeto charAt() è anche un metodo...
Logged
Luckino
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 107


Io nn sono il migliore ma nessuno è migliore di me


« Reply #14 on: 25-01-2010, 20:31:12 »

Sì ho capito, ma il metodo replace è fatto con charAt() ? che a sua volta non è altro che un metodo...
A questo punto facciamolo in assembly.

Io discuto solo il fatto che mi trovo un po' spaesato, cioè va bene che devo simulare il metodo replace, però vorrei capire qual'è la giusta strada, perché ripeto charAt() è anche un metodo...

il metodo charAt() deve essere per forza utilizzato per prendere il carattere dalla stringa...io non conosco un modo alternativo...tu come lo faresti??
Logged
Pages: [1] 2   Go Up
Print
Jump to: