Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Luckino on 25-01-2010, 15:53:56



Title: Esercizio prova sui metodi
Post by: Luckino 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


Title: Re:Esercizio prova sui metodi
Post by: Flyer 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();
}
}
}


Title: Re:Esercizio prova sui metodi
Post by: Rolex 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


Title: Re:Esercizio prova sui metodi
Post by: stallclinton on 25-01-2010, 18:37:28
Ma utilizzare la funzione replace?


Title: Re:Esercizio prova sui metodi
Post by: Luckino on 25-01-2010, 18:38:04
grazie mille ho risolto!!! .applausi .applausi


Title: Re:Esercizio prova sui metodi
Post by: stallclinton 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...


Title: Re:Esercizio prova sui metodi
Post by: Luckino 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... .penso


Title: Re:Esercizio prova sui metodi
Post by: Flyer 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


Title: Re:Esercizio prova sui metodi
Post by: stallclinton 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?


Title: Re:Esercizio prova sui metodi
Post by: isuccia89 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....  :-)|


Title: Re:Esercizio prova sui metodi
Post by: Luckino 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!!


Title: Re:Esercizio prova sui metodi
Post by: stallclinton 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...


Title: Re:Esercizio prova sui metodi
Post by: Luckino 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!!


Title: Re:Esercizio prova sui metodi
Post by: stallclinton 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...


Title: Re:Esercizio prova sui metodi
Post by: Luckino 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??


Title: Re:Esercizio prova sui metodi
Post by: stallclinton on 25-01-2010, 20:36:10
Beh puoi usare anche substring() scorrendo man mano la frase... :D

Ecco lo snippet (sei già dentro il for che itera ogni carattere):
Code:
if(!m[i][j].substring(k, k+1).equals("x") && !m[i][j].substring(k, k+1).equals("y")){
filtered_string += m[i][j].substring(k, k+1);
}


Title: Re:Esercizio prova sui metodi
Post by: Luckino on 25-01-2010, 20:52:44
Beh puoi usare anche substring() scorrendo man mano la frase... :D

Ecco lo snippet (sei già dentro il for che itera ogni carattere):
Code:
if(!m[i][j].substring(k, k+1).equals("x") && !m[i][j].substring(k, k+1).equals("y")){
filtered_string += m[i][j].substring(k, k+1);
}

si...anche questo si può usare ma secondo me e più semplice il charAt!!


Title: Re:Esercizio prova sui metodi
Post by: stallclinton on 25-01-2010, 20:54:26
Beh puoi usare anche substring() scorrendo man mano la frase... :D

Ecco lo snippet (sei già dentro il for che itera ogni carattere):
Code:
if(!m[i][j].substring(k, k+1).equals("x") && !m[i][j].substring(k, k+1).equals("y")){
filtered_string += m[i][j].substring(k, k+1);
}

si...anche questo si può usare ma secondo me e più semplice il charAt!!

Ma mai quanto il replace()  |-O


Title: Re:Esercizio prova sui metodi
Post by: Daréios89 on 25-01-2010, 21:02:49
Lo dico per esperienza, se dovete lavorare con le stringhe usate charAt() e substring(), niente replace() o altro.
Il prof a parte i primi due metodi non li accetta gli altri.
Almeno se non sono stati trattati a lezione.


Title: Re:Esercizio prova sui metodi
Post by: stallclinton on 25-01-2010, 21:07:15
Lo dico per esperienza, se dovete lavorare con le stringhe usate charAt() e substring(), niente replace() o altro.
Il prof a parte i primi due metodi non li accetta gli altri.
Almeno se non sono stati trattati a lezione.

Sì effettivamente è troppo semplice col replace() e potrebbe suonare come un "insulto", grazie comunque del tuo intervento, è utile avere pareri da chi ci è già passato.


Title: Re:Esercizio prova sui metodi
Post by: Luckino on 25-01-2010, 21:46:08
Lo dico per esperienza, se dovete lavorare con le stringhe usate charAt() e substring(), niente replace() o altro.
Il prof a parte i primi due metodi non li accetta gli altri.
Almeno se non sono stati trattati a lezione.

 .quoto......lo dico da mezz'ora!!!!


Title: Re:Esercizio prova sui metodi
Post by: ExEcUtIvE on 07-02-2010, 12:34:46
Raga ho un problema con questo esercizio, di seguito posterò in ordine testo, codice e risultati:

Testo:
Scrivere un metodo che prenda in input tre matrici, con le stesse dimensioni, di double e restituisca
un boolean che indichi se le tre matrici presentano (in qualunque posizione) una colonna comune.
P.S.: Due double sono considerati uguali se differiscono per meno di un millesimo.

Codice:
Code:
public class es31
{
public static boolean Metodo(double[][] A,double[][] B,double[][] C)
{
for (int i=0;i<A.length;i++) {
for(int j=0;j<A[i].length;j++) {
for(int x=0;x<B.length;x++) {
for(int y=0;y<B[x].length;y++) {
if(((Math.abs(A[j][i]-B[y][x]))<0.0001) || ((Math.abs(A[j][i]-C[y][x]))<0.0001) || ((Math.abs(B[j][i]-C[y][x]))<0.0001));
{
System.out.println((Math.abs(A[j][i]-B[y][x]))+"   "+(Math.abs(A[j][i]-C[y][x]))+"   "+(Math.abs(B[j][i]-C[y][x])));
return true;
}
}
}
}
}
return false;
}
public static void main(String[] args)
{
double[][] A={{1,2,3.900004},{4,5,6},{7,8,9}};
double[][] B={{1.1,2.2,3.3},{4.4,5.5,6.6},{7.7,8.8,9.9}};
double[][] C={{1.12,2.23,3.409078},{4.45,5.56,6.67},{7.78,8.89,9.99}};
System.out.println(Metodo(A,B,C));
}
}

Risultato:
>Exit code: 0
>java -cp . es31
0.10000000000000009   0.1200000000000001   0.020000000000000018
true
>Exit code: 0


Calcolando il valore assoluto della differenza, non ci sono numeri come ho stampato in output che sono <0,0001...
Perchè invece mi da true O_O...???