View Full Version : Confrontare due oggetti di un array
Marcoz91
28-01-2014, 20:10
Salve a tutti !
Mi sono appena iscritto su questo forum perchè non ho molta dimestichezza con il linguaggio java, e sarei molto grato se qualcuno di voi potesse darmi una mano =)
Il mio problema è questo :
ho creato una classe generica di tipo studente .
la classe contiene i seguenti attributi :
String nome;
String cognome;
int eta;.
Dopo aver dichiarato costruttore e aver sviluppato i soliti metodi get e set, ho creato un array di tipo studente:
studente [] vet = new studente [n];
Solo che adesso non riesco a confrontare gli elementi dello stesso array per trovare il piu' piccolo in base al campo età.
ho pensato di fare qualcosa del tipo :
if (vet[i].get_eta() < vet [i+1].get_eta()) ma non so come passare il valore dell'indice della posizione dell'elemento piu' piccolo nel main , in modo da poterlo visualizzare !
clockover
28-01-2014, 22:10
ma non so come passare il valore dell'indice della posizione dell'elemento piu' piccolo nel main , in modo da poterlo visualizzare !
Sai che questo non l'ho capito? Per piacere sii più preciso. Cosa devi fare?
Oceans11
28-01-2014, 23:25
Se ho capito cosa intendi, stai sbagliando algoritmo.
Pensala così:
Il primo Studente dell'array è quello più piccolo di età.
Per ogni Studente (dal secondo in poi)
- verifica se l'età dello Studente i-esimo è minore di quella del più piccolo
- in caso affermativo, l'i-esimo Studente (quello corrente) è il più piccolo, salvalo.
- altrimenti continua con il prossimo studente.
Marcoz91
29-01-2014, 06:21
Praticamente la traccia mi dice di trovare , nell'array vet di tipo studente, l'elemento con l'età minore, il piu' giovane per intederci.
Solo che non riesco a confrontare gli oggetti dell'array tra di loro per trovare il minore.
clockover
29-01-2014, 07:24
Praticamente la traccia mi dice di trovare , nell'array vet di tipo studente, l'elemento con l'età minore, il piu' giovane per intederci.
Solo che non riesco a confrontare gli oggetti dell'array tra di loro per trovare il minore.
Allora quello che hai scritto è giusto
vett[i].getEta() <>=ecc.. vett[j].getEta()
altrimenti, se sai che sarà solo e sempre l'età ad essere comparata, puoi implementare l'interfaccia Comparable
Marcoz91
29-01-2014, 07:30
Ci stavo pensando, ma alla fine ho deciso di confrontare solamente le get.
Il problema è che ecplise mi segna ques'ultimo confronto come errore, e in piu' non riesco nemmeno a visualizzare l'elemento con l'età minore.
clockover
29-01-2014, 07:38
Ci stavo pensando, ma alla fine ho deciso di confrontare solamente le get.
Il problema è che ecplise mi segna ques'ultimo confronto come errore, e in piu' non riesco nemmeno a visualizzare l'elemento con l'età minore.
Si ma devi essere più preciso. Mostra almeno il codice (indentato per piacere)
Marcoz91
29-01-2014, 07:45
package uni;
public class metodi {
public static void minore (studenti[]vet) {
//variabile che conterrà l'indice dell'elemento piu' piccolo
int min = 0;
//indice array
int i=0;
for (i=0;i<vet.length;i++){
if (vet[i].get_eta()< vet[i-1].get_eta()){
min=i;
}
else {
min=i+1;
}
}
System.out.println("lo studente piu giovane e"+vet[min]);
}
}
E NELLA CLASSE PRINCIPALE, OVVERO NEL MAIN, RICHIAMO IL METODO:
metodi.minore(vet)
SOLO CHE QUANDO VADO IN COMPILAZIONE, ECLIPSE MI RILEVA UN ERRORE NEL CONFRONTO "(vet[i].get_eta()< vet[i-1].get_eta()"
SCUSATE MA NON SAPEVO COME ALLEGARE IL FILE DI TESTO SINGOLO
clockover
29-01-2014, 07:58
public class metodi {
public static void minore(studenti[] vet) {
//variabile che conterrà l'indice dell'elemento piu' piccolo
int min = 0;
//indice array
int i = 0;
for (i = 0; i < vet.length; i++) {
if (vet[i].get_eta() < vet[i - 1].get_eta()) {
min = i;
} else {
min = i + 1;
}
}
System.out.println("lo studente piu giovane e" + vet[min]);
}
}
QUESTO E' UN CODICE INDENTATO
Se io ho questo codice
for(int i = 0; i < len; i++)
if(vett[i] < vatt[i - 1])....
c'è qualcosa che non va. Il tuo indice i parte da 0, quindi il primo confronto già non va bene perchè ti troveresti con un indice a -1 al primo confronto.
Puoi seguire un'altra linea comunque.
1) prendi come elemento più piccolo il primo dell'array, e quindi ti segni l'indice, che per il momento è il minore
2) scorri l'array a partire dall'indice 1
Per ora non ti dico di più. Vediamo i progressi..
Marcoz91
29-01-2014, 12:56
Scusate, ho capito da solo il mio errore.
Ho sbagliato semplicemente il passaggio dei parametri, e quindi non riuscivo a stampare l'elemento
clockover
29-01-2014, 14:34
Vedi che quel metodo è completamente sbagliato
Inviato da una supercazzola ed un Nexus 5 scappellato a sinistra.. con senso unico
Deep thought
01-02-2014, 15:39
Come ti sta dicendo clockover, devi confrontare l'elemento che al momento conosci come il più piccolo con tutti i suoi successivi. In pratica:
scegli il primo elemento;
lo memorizzi in una variabile "Studente min";
In un ciclo for in cui scansioni tutti gli elementi dell'array, a ogni esecuzione del ciclo fai questa valtazione:
se il valore all'indice i è maggiore di min, passa avanti;
se il valore all'indice i è minore di min, assegna min = vett[i].get_eta().
al termine del ciclo for, la variabile min è il riferimento al valore più piccolo.
Se invece non devi ottenere un riferimento all'oggetto Studente con età minore, ma semplicemente trovare il suo indice nell'array, allora basta modificare di poco l'algoritmo, in modo da assegnare alla variabile min non più lo studente, ma il suo indice in vett.
E poi prima di affrontare la programmazione orientata agli oggetti dovresti accertarti di essere già a tuo agio con gli algoritmi di base come questo... quello che hai scritto tu, oltre a non funzionare, restituirà sempre un'eccezione ArrayIndexOutOfBounds perché al primo ciclo cerca di accedere a vett[-1].
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.