Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: gaernik on 19-02-2009, 17:52:00



Title: Esercizio 16 di eserciziIprova.pdf
Post by: gaernik on 19-02-2009, 17:52:00
avrei un problemino con questo codice:


Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe e
 *restituisca un boolean che indichi se esiste una coppia di stringhe in S in cui occorre lo stesso
 *carattere. Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True.
 */
public class Es16 {

public static boolean metodo(String [][] A ){
boolean coppiaTrovata = false;
for (int i=0;i<A.length;i++){
for (int k=0;k<A[i].length;k++){
for (int i1=0;i<A.length;i++){
for (int k1=0;k1<A[i1].length;k1++){
for (int c=0;c<A[i][k].length();c++){
for (int r=0;r<A[i1][k1].length();r++){
if (A[i][k].charAt(c)==A[i1][k1].charAt(r)){
coppiaTrovata=true;
}
}
}
}
}
}
}
return coppiaTrovata;
}

public static void main (String [] args){

String [][] S = {  {"ab", "cdx", "eee", "fg", "hi"},
   {"lmno", "pq", "rs"},
   {"tu", "vvv", "zzz", "xx"}};


System.out.println(metodo(S));
}
}
mi da questo errore:
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Es16.metodo(Es16.java:10)
at Es16.main(Es16.java:34)

cos'è che mi sfugge? non capisco il perchè.
grazie per l'aiuto  .ciaociao


Title: Re:Esercizio 16 di eserciziIprova.pdf
Post by: Root on 19-02-2009, 17:59:12
il problema è nel terzo for.

Code:
for (int i1=0;i<A.length;i++)

crei la variabile i1, controlli la variabile i e incrementi la variabile i, e quindi la variabile i1 rimane sempre a 0.

Controllate quello che scrivete; è la prima regola!


Title: Re:Esercizio 16 di eserciziIprova.pdf
Post by: gaernik on 19-02-2009, 18:03:32
sì hai ragione,è che eclipse mi segnava l'errore su un'altra riga e quella mi è sfuggita, ora ho risolto, grazie tante  .smile

anzi lo posto corretto se dovesse servire a qualcuno  .sisi
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe e
 *restituisca un boolean che indichi se esiste una coppia di stringhe in S in cui occorre lo stesso
 *carattere. Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True.
 */
public class Es16 {

public static boolean metodo(String [][] A ){
boolean coppiaTrovata = false;
for (int i=0;i<A.length;i++){
for (int k=0;k<A[i].length;k++){
for (int i1=0;i1<A.length;i1++){
for (int k1=k+1;k1<A[i1].length;k1++){
for (int c=0;c<A[i][k].length();c++){
for (int r=0;r<A[i1][k1].length();r++){
if (A[i][k].charAt(c)==A[i1][k1].charAt(r)){
coppiaTrovata=true;
}
}
}
}
}
}
}
return coppiaTrovata;
}

public static void main (String [] args){

String [][] S = {  {"aaa", "ccc", "eee", "fff", "hhh"},
   {"lll", "ppp", "rrxr"},
   {"ttt", "vvv", "zzz", "xx"}};


System.out.println(metodo(S));
}
}


Title: Re:Esercizio 16 di eserciziIprova.pdf
Post by: Root on 19-02-2009, 18:06:22
sì hai ragione,è che eclipse mi segnava l'errore su un'altra riga e quella mi è sfuggita, ora ho risolto, grazie tante  .smile

Eclipse? devi usare SciTE o meglio ancora il blocco note di windows o meglio ancora nano di linux...
altrimenti non imparerai mai come si deve!  .wink

saluti
dario


Title: Re:Esercizio 16 di eserciziIprova.pdf
Post by: atrix0ne on 19-02-2009, 20:11:09
sì hai ragione,è che eclipse mi segnava l'errore su un'altra riga e quella mi è sfuggita, ora ho risolto, grazie tante  .smile

anzi lo posto corretto se dovesse servire a qualcuno  .sisi
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe e
 *restituisca un boolean che indichi se esiste una coppia di stringhe in S in cui occorre lo stesso
 *carattere. Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True.
 */
public class Es16 {

public static boolean metodo(String [][] A ){
boolean coppiaTrovata = false;
for (int i=0;i<A.length;i++){
for (int k=0;k<A[i].length;k++){
for (int i1=0;i1<A.length;i1++){
for (int k1=k+1;k1<A[i1].length;k1++){
for (int c=0;c<A[i][k].length();c++){
for (int r=0;r<A[i1][k1].length();r++){
if (A[i][k].charAt(c)==A[i1][k1].charAt(r)){
coppiaTrovata=true;
}
}
}
}
}
}
}
return coppiaTrovata;
}

public static void main (String [] args){

String [][] S = {  {"aaa", "ccc", "eee", "fff", "hhh"},
   {"lll", "ppp", "rrxr"},
   {"ttt", "vvv", "zzz", "xx"}};


System.out.println(metodo(S));
}
}

l'esercizio nn è esatto al 100%.. eseguendo il debug di qst codice ed aggiungendo dei system.out.print per conoscere gli indici di riga e di colonna del risultato finale si intuisce che l'esercizio è casualmente giusto.. 
guardate lo stesso esercizio solo cn il nome delle variabili diverse e la sistemazione delle stringhe nell'array bidimensionale diverse e vedete il risultato ke da.. .. .. riflettendo dovrebbe trovare prima l'occorrenza della "e" e poi seguentemente quella della "f".. invece col codice del nostro collega (sempre quello risproposto) nn è proprio esatto  :-)L :

Code:
public class Es16
  {
    public static boolean metodo(String [][] A )
      {
      boolean coppiaTrovata = false;
     
      for (int r=0;r<A.length;r++)
        {
        for (int c=0;c<A[r].length;c++)
          {
          for (int r1=0; r1<A.length;r1++)
            {
            for (int c1=c+1; c1<A[r1].length;c1++)
              {
              for (int Char=0;Char<A[r][c].length();Char++)
                {
                for (int Char1=0;Char1<A[r1][c1].length();Char1++)
                  {
                  if (A[r][c].charAt(Char)==A[r1][c1].charAt(Char1))
                    {
                    coppiaTrovata=true;
                    System.out.println(A[r][c].charAt(Char)+" "+ r +" "+ c +" -- " +
                                       A[r1][c1].charAt(Char1) +" " + r1 +" "+ c1);
                    }
                  }
                }
              }
            }
          }
        }
      return coppiaTrovata;
      }

public static void main (String [] args){

String [][] S = {  {"aaa", "ccc", "eee", "fff", "hhh"},
                           {"flll", "eppp", "rrr"},
                           {"ttt", "vvv", "zzz", "xx"} };


System.out.println(metodo(S));
}
}

diffidate dai codici un pò errati  |-O :yoh .timido