Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Meluccio10 on 18-02-2011, 10:58:08



Title: Es.array
Post by: Meluccio10 on 18-02-2011, 10:58:08
ehi ragazzi mi da errore nell'ultima riga di codice quando eseguo la stampa sapete dirmi cosa sbaglio prease??
Code:
/*
Scrivere un metodo che prenda in input una matrice A ed un array B entrambe di byte ed un intero n,
e restituisca un boolean che indichi se esistono in B almeno n elementi presenti anche in A.
*/

public class Es11Melo
{
public static boolean metodo(byte [][]A, byte []B,int n)
{ int count=0;
n=B.length;
for(int i=0;i<A.length;i++)
{
for(int j=0;j<A[0].length;j++)
{
for(int x=0;x<B.length;x++)
{
if(A[i][j]==B[x])
count++;
if(count==n)
return true;
}
}
}
return false;
}

public static void main(String []args)
{ int n;
byte []B={8,9,10,9};
byte [][]A={{7,8,9},{2,8,3,4,7,2},{7,4,1,2,5,6,9,8,7}};
System.out.println((n));
}
}
[\CODE]

grazie in anticipo....


Title: Re:Es.array
Post by: StephCT on 18-02-2011, 11:11:23
intanto secondo me stai interpretando male l'esercizio. l'esercizio che se, ad esempio n=10, allora vuole vedere se ci sono almeno 10 elementi in B che sono presenti pure nella matrice. mentre invece tu controlli se tutti gli elementi di B sono presenti in A, che è diverso. quindi dovresti lasciare n intanto col suo valore di input e usare il contatore che dovrà arrivare a essere maggiore o uguale a n, non solo uguale (c'è una sottigliezza, almeno n elementi e non n elementi, quindi implica che tu devi contarlo anche se va oltre n xkè è un risultato accettabile).
l'errore sta nel fatto che nel richiamare il metodo devi scrivere:
Code:
System.out.println(metodo(A,B,n));
il risultato stampato sarà true o false a seconda del valore di ritorno. un altro consiglio: dato che, come detto prima, c'è da controllare che ci siano almeno n elementi e non solo n elementi, nn devi fermare il controllo appena li trovi ma devi lasciarlo andare avanti, quindi l'if che controlla l'obiettivo deve essere messo fuori da tutti i cicli.


Title: Re:Es.array
Post by: Meluccio10 on 18-02-2011, 11:29:14
quindi se nn ho capito male...cosi dovrebbe andare?
Code:
/*
Scrivere un metodo che prenda in input una matrice A ed un array B entrambe di byte ed un intero n,
e restituisca un boolean che indichi se esistono in B almeno n elementi presenti anche in A.
*/

public class Es11Melo
{
public static boolean metodo(byte [][]A, byte []B,int n)
{ int count=0;
if(B.length<n)
return false;
for(int i=0;i<A.length;i++)
{
for(int j=0;j<A[0].length;j++)
{
for(int x=0;x<B.length;x++)
{
if(A[i][j]==B[x])
count++;
if(count==n)
return true;
}
}
}
return false;
}

public static void main(String []args)
{ int n=2;
byte []B={8,9,10,5,5};
byte [][]A={{7,3,2,7},{2,3,4,7,2},{7,4,1,2,6,7}};
System.out.println(metodo(A,B,n));
}
}
[\CODE]


Title: Re:Es.array
Post by: StephCT on 18-02-2011, 12:20:55
si questo è già più corretto, e funziona sicuramente se si mette come ipotesi che sia la matrice che l'array abbiano solo elementi distinti, quindi niente ripetizioni nè nell'array nè nella matrice oppure se le ripetizioni esistono solo nell'array...sono un pò scettico sul funzionamento se esistono elementi ripetuti in entrambi, xkè si rischia di avere un esito positivo anche quando nn lo è