Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Bastard_Inside on 01-12-2008, 13:45:05



Title: esercizio 2 lasciato dal prof stamattina
Post by: Bastard_Inside on 01-12-2008, 13:45:05
ECCO QUI L'ESERCIZIO FUNZIONANTE, PROPONETE EVENTUALI MIGLIORIE !!!
Code:
esercizio2:
  scrivere un metodo che prenda come parametri formali due array di stringhe ed un intero N e restituisca in output
  un valore booleano che indichi la presenza di 2 stringhe uguali di lunghezza maggiori di N nei differenti vettori di input.
 */
 
public class esercizio2
{
public static void main (String[]args) //main
{
int K=5;  //intero N
String[] A= {"casa", "palla", "metro", "pc","metropolitana"};
String[] B ={"computerpdcuy","palla"};
System.out.println(uguale_lunghezza(A,B,K));
}

public static boolean uguale_lunghezza(String[] x, String[] y, int N) //metodo
{
boolean trovato=false;

for(int i=0;i<x.length&&!trovato;i++)
{
if(x[i].length()>N)
{
int temp=x[i].length();

for(int j=0;j<y.length&&!trovato;j++)
{
if (y[j].length()==temp)
{
trovato=true;
}
}
}
}
return trovato;
}

}



Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: k1r4 on 01-12-2008, 14:06:03
ecco la mia soluzione:

Code:
public class Main {

    public static boolean compara(String[] a, String[] b, int n) {
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if (a[i].length() > n && b[j].length() > n) {     //Controllo che entrambe le stringhe siano maggiori di n
                    if (a[i].compareTo(b[j]) == 0) {                 //Comparo le stringhe e se sono uguali e ritorno true
                        return true;
                    }
                }
            }
        }
        return false;
    }


    public static void main(String[] args) {
        String []a = {"ciao", "betulla", "cavolo", "computer"};
        String []b = {"buono", "cervo", "computer"};
        int n = 5;
        System.out.print(compara(a, b, n));
    }

}

il metodo "compara" ritorna true alla prima occorrenza


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: Aigor on 01-12-2008, 14:55:18
 Dove controlli che le due stringhe siano uguali ? Ti ritorna vero SOLO se esistono due stringhe di dimensione uguale, maggiori di n...
o forse ho capito male io l'esercizio e deve fare proprio questo ?... .whistling


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: Aigor on 01-12-2008, 14:56:25
 Ehm... mi riferivo a Bastard_Inside  .camberman


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: ShiShi on 01-12-2008, 15:02:27
Code:
public class EsNuovo
{
    public static void main (String[]args)
    {
        int N = 3;
        String [] A = {"no", "iasa", "ciao",};
        String [] B = {"ia", "iasa"};
        System.out.println ( metodo (A,B,N) );
    }

public static boolean metodo (String [] A, String [] B, int N)
   {
       boolean prova = false;
          for (int i=0; i<A.length; i++)
             for (int j=0; j<B.length; j++)
                 if (A[i] == B[j] && metodo2 (A[i],B[j],N))
                     prova = true;
        return prova;
    }
   
public static boolean metodo2 (String A, String B, int N)
   {
       boolean prova2 = false;
       for (int i=0; i<A.length(); i++)
           for (int j=0; j<A.length(); j++)
             if (A.length()>N && B.length()> N)
             {
                 prova2 = true;   
                return prova2;
         }
         return prova2;
     }
}

Io l'ho fatto così  .smile
Il compareTo non credo si possa usare.


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: k1r4 on 01-12-2008, 15:09:58
Code:
<CUT>

Io l'ho fatto così  .smile
Il compareTo non credo si possa usare.

perchè?   .bah


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: Bastard_Inside on 01-12-2008, 15:27:43
Dove controlli che le due stringhe siano uguali ? Ti ritorna vero SOLO se esistono due stringhe di dimensione uguale, maggiori di n...
o forse ho capito male io l'esercizio e deve fare proprio questo ?... .whistling

devi solo vedere se esistono 2 stringhe di uguale lunghezza e maggiori d n ! non devono essere uguali (stessa parola)


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: ShiShi on 01-12-2008, 15:29:21
Code:
<CUT>

Io l'ho fatto così  .smile
Il compareTo non credo si possa usare.

perchè?   .bah
Se non sbaglio il prof. non vuole che lo si usi nei compiti.. .penso


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: k1r4 on 01-12-2008, 15:31:54
Dove controlli che le due stringhe siano uguali ? Ti ritorna vero SOLO se esistono due stringhe di dimensione uguale, maggiori di n...
o forse ho capito male io l'esercizio e deve fare proprio questo ?... .whistling


devi solo vedere se esistono 2 stringhe di uguale lunghezza e maggiori d n ! non devono essere uguali (stessa parola)

Nell esempio che ha fatto Cincotti proprio su questo esercizio mostrava l'utilizzo del metodo equals.. quindi le stringhe devono essere la stessa parola.


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: k1r4 on 01-12-2008, 15:33:07
Code:
<CUT>

Io l'ho fatto così  .smile
Il compareTo non credo si possa usare.

perchè?   .bah
Se non sbaglio il prof. non vuole che lo si usi nei compiti.. .penso

Scusa ma non gli ho mai sentito dire una cosa del genere  .penso  anche perchè alla fine fanno entrambi la stessa cosa...

ma potrei sbagliarmi  :[Emoticon] Asd:


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: carmelo_ct on 01-12-2008, 16:03:56
scusate, ma perchè nel ciclo for del 1° metodo si usa un .lenght senza (), e poi nell'altro ciclo for si usa

un .lenght con ()          ?
 


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: Aigor on 01-12-2008, 16:08:50
scusate, ma perchè nel ciclo for del 1° metodo si usa un .lenght senza (), e poi nell'altro ciclo for si usa

un .lenght con ()          ?
 

Il primo lenght restituisce la lunghezza dell'array, il secondo leght() restituisce la lunghezza della stringa alla posizione i.
comunque per quanto riguarda la equals e la compareTo hanno entrambe la stessa funzione all'incirca ( la prima restituisce un boolean la seconda un intero ), di solito la compareTo viene fatta in programmazione 2 ! conoscerla comunque non è un delitto  .camberman


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: MisteroLupo on 01-12-2008, 16:18:51
Ecco la mia soluzione, non l'ho testata a fondo ma a qualche prova sembra funzionare. Ho usato un solo ciclo for:
Code:
public static boolean esercizio2(String[] A,String[] B, int N) {
    boolean trovati = false;
    for (int i = 0;i<A.length;i++){
        if (A[i].length() > N && A[i].equals(B[i])) {trovati = true;}
    }
    return trovati;
}


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: k1r4 on 01-12-2008, 16:22:33
Ecco la mia soluzione, non l'ho testata a fondo ma a qualche prova sembra funzionare. Ho usato un solo ciclo for:
Code:
public static boolean esercizio2(String[] A,String[] B, int N) {
    boolean trovati = false;
    for (int i = 0;i<A.length;i++){
        if (A[i].length() > N && A[i].equals(B[i])) {trovati = true;}
    }
    return trovati;
}

scusa ma gli array di stringhe possono avere un numero di elementi diverso  :[Emoticon] Asd:


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: ShiShi on 01-12-2008, 16:25:24
Dove controlli che le due stringhe siano uguali ? Ti ritorna vero SOLO se esistono due stringhe di dimensione uguale, maggiori di n...
o forse ho capito male io l'esercizio e deve fare proprio questo ?... .whistling

devi solo vedere se esistono 2 stringhe di uguale lunghezza e maggiori d n ! non devono essere uguali (stessa parola)
Ha ragione Aigor le stringhe devono 'essere uguali e di lunghezza maggiore di N'.
Code:
<CUT>

Io l'ho fatto così  .smile
Il compareTo non credo si possa usare.

perchè?   .bah
Se non sbaglio il prof. non vuole che lo si usi nei compiti.. .penso

Scusa ma non gli ho mai sentito dire una cosa del genere  .penso  anche perchè alla fine fanno entrambi la stessa cosa...

ma potrei sbagliarmi  :[Emoticon] Asd:

Meglio così se si può usare :P


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: MisteroLupo on 01-12-2008, 16:30:03
scusa ma gli array di stringhe possono avere un numero di elementi diverso  :[Emoticon] Asd:
Avevo capito male.. pensavo si dovessero confrontare a coppie con gli stessi indici e quindi gli array fossero della stessa lunghezza. Correggo vah!


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: MisteroLupo on 01-12-2008, 16:38:42
esercizio versione 2.0 :[Emoticon] PC Asd:
Code:
public static boolean esercizio2(String[] A,String[] B, int N) {
    boolean trovati = false;
    for (int i=0;i<A.length;i++){
        for (int j=0;j<B.length;j++){
            if (A[i].length() > N && A[i].equals(B[j])) { trovati = true; }
        }
    }
    return trovati;
}


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: Aigor on 01-12-2008, 16:48:31
esercizio versione 2.0 :[Emoticon] PC Asd:
Code:
public static boolean esercizio2(String[] A,String[] B, int N) {
    boolean trovati = false;
    for (int i=0;i<A.length;i++){
        for (int j=0;j<B.length;j++){
            if (A[i].length() > N && A[i].equals(B[j])) { trovati = true; }
        }
    }
    return trovati;
}

[color=purple]Direi che è ottimo, tutt'al più puoi togliere le graffe nei for e nell'if che non sono necessarie e poi direi che è ottimizzato al massimo !!  .applausi[/color]


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: MisteroLupo on 01-12-2008, 16:53:36
grazie.. le graffe avevo pensato di lasciarle per renderlo più leggibile, la prossima volta le evito.

Posto pure l'esercizio 1 già che ci sono, giusto per confrontarlo e sapere se è giusto (non l'ho manco testato):
Code:
/* Esercizio 1
 * Scrivere un metodo che prenda come parametri formali tre vettori di float
 * di uguale dimensione e restituisca in output un vettore di interi contenente
 * in ogni locazione un valore tra 1,2,3 e che denoti rispettivamente l'array
 * contenente il minimo tra i valori contenuti.
 */

public static int[] esercizio1(float[] vettore1, float[] vettore2, float[] vettore3) {
    int[] output = new int[vettore1.length]; // la lunghezza dei vettori è uguale per tutti
    for (int i=0;i<vettore1.length-1;i++){
        if (vettore1[i]<vettore2[i]) {output[i] = 1;} else
        if (vettore2[i]<vettore1[i]) {output[i] = 2;} else output[i] = 3;
    }
    return output;
}
Anche quì vale il discorso delle parentesi graffe inutili :boh


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: k1r4 on 01-12-2008, 16:55:26
si ma ottimizzare non significa togliere le parentesi  :-K


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: Vivynz on 02-12-2008, 17:19:20
non riesco a trovare l'errore...il metodo mi restituisce sempre true... .penso .bah
Code:
public class StringheUguali
{
public static boolean confronto (String[] a, String[] b, int n)
{
boolean si=false;
for(int i=0;(i<a.length);i++)
{
for(int j=0;(j<b.length);j++)
{
if((a[i].length()>n)&&(a[i].equals(b[j])));
{
si=true;
}
}
}
return si;
}


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: k1r4 on 02-12-2008, 17:29:12
sto provando il tuo codice al debugger e a quanto pare il metodo
Code:
a[i].equals(b[j])
resistuisce sempre true...

mi sfugge qualcosa...


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: Aigor on 02-12-2008, 17:31:27
Ad esempio.... prova togliere il ; dopo l'if  :"-( !!!


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: k1r4 on 02-12-2008, 17:32:19
Ad esempio.... prova togliere il ; dopo l'if  :"-( !!!

OMG  :"-( :-)|


Title: Re:esercizio 2 lasciato dal prof stamattina
Post by: Vivynz on 02-12-2008, 17:37:30
biiiiiiiiii grazie   :-)|
non l'avevo messo di proposito eh eh