Pages: 1 [2]   Go Down
Print
Author Topic: Un metodo dove non capisco cos'è in più o in meno  (Read 3987 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
JF
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 383



WWW
« Reply #15 on: 23-02-2009, 00:15:37 »

Scusa ma che caspio sarebbe
Code:
S.length[r]
l'errore è quello 

E' uno dei tanti... Reverse mi ha fatto notare che ho preso per buona la prima soluzione che ho visto, correggendo solo la "grammatica", ma in effetti quella soluzione controlla i doppioni per riga e non per colonna. La sua soluzione invece centra il problema (controlla per colonna e non per riga).

Reverse perchè riprendi la variabile "esiste", controllando il suo valore in tutti i cicli, invece di usare direttamente "return true"?

Credo che la condizione da verificare sia "Math.min (S [r1].length, S [r2].length) > c", non >= (giusto?). In ogni caso sarebbe equivalente ma un po' più intuitivo a mio parere riscrivere il controllo così:

Code:
if (c<S [r1].length  &&  c<S [r2].length  &&  S[r1][c].equals(S[r2][c])) return true;
Logged

ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #16 on: 23-02-2009, 01:19:18 »

Reverse perchè riprendi la variabile "esiste", controllando il suo valore in tutti i cicli, invece di usare direttamente "return true"?
Ehm... questa è una tecnica che evita di interrompere bruscamente il controllo di flusso, che ho appreso sulla pelle quando ho fatto un parser per progammi ANSI-C (C99) scritto sempre in ANSI-C (C99) per Progetto Software boh.
È molto utile in caso di debug, anche se in effetti per un codice così piccolo è difficile non notare i bug boh.

Quote
Credo che la condizione da verificare sia "Math.min (S [r1].length, S [r2].length) > c", non >= (giusto?). In ogni caso sarebbe equivalente ma un po' più intuitivo a mio parere riscrivere il controllo così:

Code:
if (c<S [r1].length  &&  c<S [r2].length  &&  S[r1][c].equals(S[r2][c])) return true;
Corretto, non ho considerato che la lunghezza è sempre 1+l'indice massimo univ. Concordo anche sulla intuitività della seconda espressione pray.

Ciao .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #17 on: 23-02-2009, 14:53:18 »

Scusate ragazzi ho provato adesso a riscrivere qualcosa ma mi dà sempre il solito errore outofbounds

Ho scritto questo:

Code:
/*Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca un boolean che indichi se esiste una colonna in S contenente due stringhe uguali (saltare le
eventuali stringhe mancanti).*/

class Stringheuguali
{
public static void main(String[] args)
{
String [][] S={{"slurp","unaltroprogramma","benvenga"},
                     {"festival","marcocarta"},
    {"lambda4","sanremo"},
    {"cuccaraccia"},
    {"lamba","diverto","yeah","ilcuore","cancello"},
    {"msn","cenerella","mammamia"}};
   
   
   
System.out.println(prendi(S));
}
   



       public static boolean prendi(String [][] S)
{
boolean esiste =true;
for (int k=0; k<S[0].length; k++)
{
for (int r=0; r<(S.length-1); r++)
{
for (int r1=r+1; r1<S.length; r1++)
if (S[r][k].equals(S[r1][k]))
return esiste;

}

}

return !esiste;
}

}

Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
CollegaCaparezza
Apprendista Forumista
**
Offline Offline

Posts: 141



« Reply #18 on: 23-02-2009, 16:23:12 »

Colleghi una domanda. Due righe r1 ed r2 si dicono compatibili se esiste una stringa in r1 e contemporaneamente la sua inversa in r2. Come faccio a capire quale è il valore inverso della stringa?Huh?
Help  testate testate testate
Logged
ShiShi
Apprendista Forumista
**
Offline Offline

Gender: Female
Posts: 256



« Reply #19 on: 23-02-2009, 16:38:20 »

Io senza usare il metodo equals l'ho svolto così, solo che non so come saltare le stringhe mancanti...


Code:
/*Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca un boolean che indichi se esiste una colonna in S contenente due stringhe uguali (saltare le
eventuali stringhe mancanti). */

public class Prova {
    public static void main (String[]args) {
        String[][]S = {{"abcd", "efgg", "il"},
                        {"mno", "pqrst"},
                        {"uvz", "wy", "il"}};
        System.out.println (metodo (S));
        }

public static boolean metodo (String[][]S) {
    boolean prova = false;
    for (int r=0; r<S.length; r++) {
      for (int r1=r+1; r1<S.length; r1++)
          for (int c=0; c<S[r].length-1; c++)
              for (int i=0; i<S[r][c].length() && i<S[r1][c].length(); i++)
                      if (S[r][c].charAt(i) == S[r1][c].charAt(i))
                          prova = true;
                  }
                  return prova;
              }
}
       
Logged
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #20 on: 23-02-2009, 17:01:52 »

equals è piu' semplice ed efficace e ti permette di non usare i for per il charat .winkquindi se non è vietato usarlo xkè non utilizzarlo?
Logged

zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #21 on: 23-02-2009, 17:04:06 »

equals è piu' semplice ed efficace e ti permette di non usare i for per il charat .winkquindi se non è vietato usarlo xkè non utilizzarlo?

Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
ShiShi
Apprendista Forumista
**
Offline Offline

Gender: Female
Posts: 256



« Reply #22 on: 23-02-2009, 17:05:52 »

infatti se non è vietato lo uso, è per avere sempre un'alternativa  ok
Logged
Pages: 1 [2]   Go Up
Print
Jump to: