Vettori in java
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.
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..
"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
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.
"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!
ecco un esempio
come vedi confronto ogni elemento di v con tutti gli altri elementi di v.
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.
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.
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.
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ì:
Secondo voi è corretto?
Fatemi sapere...grazie!!
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!!
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
-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
"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à!
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.
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.