Scrivere un metodo in Java
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!!
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
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
Ciao,
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
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

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!
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
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!
Ciao, io propongo questa soluzione baseline:
Fammi sapere
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

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)?
"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.
Ok...ora mi è più chiaro!!
"bius88":
Ok...ora mi è più chiaro!!
Bene. Adesso sarai in grado di implementare anche unione ed intersezione.

Ciao.