Vettori in java

bius88
Salve a tutti, come segnalatomi da Rggb ho aperto un nuovo thread; la domanda riguardava la possibilità di trovare due indici (per sempio $i$ e $j$) pur avendo a che fare con un solo vettore.

"Rggb":


Non ci vedo nessun problema, magari li usa per calcolare indici differenti dello stesso vettore.


Quello che non ho capito è proprio questo...che significa indici differenti dello stesso vettore?
Se il vettore è : v:${4, 5, 6, -5, -6, -4}$ e voglio vedere se ogni numero che lo compone ha un suo opposto (come in questo caso) può essermi utile utilizzare 2 indici?

Grazie..

Risposte
giacomo.bezzi
Si, infatti per fare il confronto tra gli elementi del vettore può essere utile usare due for annidati. Usando due indici puoi confrontare uno alla volta ogni elemento del vettore con tutti gli altri elementi del medesimo vettore.

bius88
"giacomo.bezzi":
Si, infatti per fare il confronto tra gli elementi del vettore può essere utile usare due for annidati. Usando due indici puoi confrontare uno alla volta ogni elemento del vettore con tutti gli altri elementi del medesimo vettore.


Era proprio questo che volevo sapere!! Però non ho capito come faccio ad utilizzare 2 indici: Qualcuno potrebbe farmi un esempio magari utilizzando il vettore v scritto in precedenza?

Grazie!

giacomo.bezzi
ecco un esempio
for(i=0; i<v.length; i++) {
    for(j=i+1; j<v.length; j++) {
        if(v[i] == -v[j]) System.out.println("Ciao!");
    }
}

come vedi confronto ogni elemento di v con tutti gli altri elementi di v.

giozh
su un vettore puoi usare tutti gli indici che vuoi, non è scritto da nessuna parte che ne devi usare uno solo.
sostanzialmente i cicli annidati che ti hanno scritto fanno la seguente cose:
il for esterno parte da i=0 e il for interno da j=i+1=1 cioè con l'indice i ti fermi inizialmente al primo elemento del vettore, e col j invece scorri gli elementi rimanenti per confrontarli col primo. terminato il ciclo for interno, nel ciclo esterno, i verrà incrementato di 1, e j diventerà 2, in questo modo parti dal secondo elemento del vettore e lo confronti con tutti i rimanenti e così via.

bius88
Si ora ho capito (spero) come vanno usati gli indici. Credo sia arrivato il momento di risolvere questo esercizio:

Si scriva un metodo analizza che riceve in ingresso un vettore v e restituisce il valore true se per ciascun elemento diverso da zero è presente in v anche l'elemento di valore opposto, altrimenti restituisce false.

Io l'ho risolto così:

public class esercizio {
     public static boolean analizza (int [] v) {
        for (i=0; i < v.length; i++) {
          boolean trovato = false;
          if (v[i] == 0) {
          for (j= i+1; j < v.length; j++) {
            if (v[i] == -v[j]) {
                  return true;
                  }
             }
          }
       return false;
    }
}


Secondo voi è corretto?
Fatemi sapere...grazie!!

giacomo.bezzi
No, così non va...

-il primo if non l'ho capito, semmai v != 0...

-perché hai creato la variabile "trovato" se non la usi?

-il for interno verifica che esista almeno un elemento t.c. v==v[j], mentre la consegna chiede di verificare che ciascun elemento abbia un suo opposto

bius88
"giacomo.bezzi":
No, così non va...

-il primo if non l'ho capito, semmai v != 0...

-perché hai creato la variabile "trovato" se non la usi?

-il for interno verifica che esista almeno un elemento t.c. v==v[j], mentre la consegna chiede di verificare che ciascun elemento abbia un suo opposto


Al primo if ho sbagliato a digitare...è v != 0;

Per quanto riguarda la variabile "trovato" e il for interno trovo difficoltà, ancora non riesco ad esprimermi nel linguaggio java.....tu come li useresti? Magari guardando imparo ad utilizzarli pure io....

Grazie per la disponibilità!

giacomo.bezzi
Io non userei una variabile booleana (trovato), ma invece un contatore, incrementandolo ogni volta che v==-v[j] oppure quando v è 0.
L'indice j lo fari partire da 0 così confronto tutti gli elementi.
Alla fine confronto il contatore con v.length per sapere se ogni elemento di v ha un opposto e restituisco true o false di conseguenza.

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