Scrivere un metodo in Java

bius88
Salve a tutti,
devo scrivere un metodo "differenza" che riceve due array di interi x e y e ne calcola la differenza, cioè costruisce un array di elementi che sono contenuti solo in y.
Esempio: $x=[1,2,3,4,5]$ e $y=[4,5,6]$ viene restitutito $6$
Ho iniziato così:

public class Esercizio {
public static int differenza (int[]x, int[]y) {

//ora non so che mettere, forse ci va: r= new int []
poi voglio scorrere i due vettori con i cicli for//

for (int i=0, i for (int j=0, j if (x==y[j])
i++;
else (x!=y[j]) // come devo scrivere per far sì che che se il numero è diverso lo devo mettere in un nuovo vettore (che chiamo r)?//

Mi farebbe piacere avere un aiuto
Grazie!!

Risposte
hamming_burst
Ciao,

costruisce un array di elementi che sono contenuti solo in $y$

sicuro che la differenza insiemistica sia questa?

Dati $X$ e $Y$, la funzione differenza è definita come $X - Y$ cioè $g in X ^^ g notin Y$.
Perciò l'insieme $R$ risultante contiene solo gli elementi di $X$ che non stanno in $Y$, il contrario di ciò che dici.

Veniamo al codice:
- nei cicli for perchè usi la lunghezza di un identificatore $v$ non vedo questo vettore da nessuna parte. Forse intendi la lunghezza di $x$ e $y$.
- perchè aumenti di +1 se gli oggetti dell'insieme sono uguali? io utilizzerei solo il caso "diverso" e copierei l'elemento nel nuovo vettore $r$ che alloccherai prima.
- la funzione per te resistuisce solo un intero?

Prova a cambiare qualcosa con quello che ti ho scritto, se hai domande basta chiedere :-)

bius88
Ciao.....la traccia è quella fornita dal professore così come l'esempio (deve ritornare $6$). Per differenza non intende dunque la sottrazione ma scrivere i numei che non sono in comune tra i vettori x e y (dunque solo il $6$).
Per quanto riguarda il codice vorrei confrontare ogni elemento del vettore x con il primo di y, poi ogni elemento del vettore x con il secondo del vettore y ecc.
Come devo scrivere il codice in questo caso?

for (int i=0, i for (int j=0, j if (x==y[j])
i++;
else (x!=y[j]) // come devo scrivere per far sì che che se il numero è diverso lo devo mettere in un nuovo vettore (che chiamo r)?//

Grazie!

xsl
Ciao, io propongo questa soluzione baseline:
public class Tester{

    /**
     * Creates a new instance of <code>Tester</code>.
     */
    public Tester() {
    }
    
    public static int[] difference(int X[], int Y[]){
    	int Z[] = new int[0];
    	for(int i = 0; i < Y.length; i ++){
    		boolean contained = false;
    		for(int j = 0; j < X.length; j++){
    			if( Y[i] == X[j] ){
    				contained = true;
    				break;
    			}
    		}
    		if( !contained ){
    			int V[] = new int[Z.length + 1];
    			System.arraycopy(Z, 0, V, 0, Z.length);
    			V[V.length - 1] = Y[i];
    			Z = V;
    		}
    	}
    	return Z;
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int X[] = {1,2,3,4,5};
        int Y[] = {4,5,6};
        int Z[] = Tester.difference(X, Y);
        Tester.print(Z);
        
        X[X.length - 1] = 10;
        Z = Tester.difference(X, Y);
        Tester.print(Z);
        
        X[0] = 8;
        X[1] = 9;
        X[3] = 2;
        Z = Tester.difference(X, Y);
        Tester.print(Z);                
    }
    
    public static void print(int[] A){
   		for(int i = 0; i < A.length; i++)
        	System.out.print( A[i] + " " );
        System.out.println();
    }
}

Fammi sapere :wink:

bius88
Non mi convince l'uso dei booleani.... come posso scrivere per dire: se x=y[j] vai avanti nel confronto, se x!=y[j] mettilo nel nuovo vettore creato (che tu hai chiamato z)?

xsl
"bius88":
se x=y[j] vai avanti nel confronto, se x!=y[j] mettilo nel nuovo vettore creato (che tu hai chiamato z)?

Sbagli nel ragionamento. Devi basarti su Y e non su X, in quanto hai detto che l'operazione è Z = X - Y, ed in Z finiscono tutti gli elementi che sono contenuti solo in Y.
Per dire che Y non è contenuto in X[j] devi per forza controllare tutto X.
Il caso Y == X[j] serve ad affermare che Y non sarà in Z.

bius88
Ok...ora mi è più chiaro!!

xsl
"bius88":
Ok...ora mi è più chiaro!!

Bene. Adesso sarai in grado di implementare anche unione ed intersezione. :-)
Ciao.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.