xXNicolaXx ha scritto:
[...]
Per il confronto tra le stringhe ho usato questo codice:
while(scelta.equalsIgnoreCase("1") || scelta.equalsIgnoreCase("2") || scelta.equalsIgnoreCase("3"));
Il confronto è corretto, anche se non hai bisogno di equalsIgnoreCase() in questo caso, equals() va benissimo (dovresti riuscire tu a dirmi il perché, altrimenti leggi un attimo la documentazione di String).
Se posso consigliartelo, prova anche l'altro metodo, cioè convertire la stringa in numero: prima o poi dovrai essere in grado di farlo (gestire una possibile eccezione è un po' più avanzata come cosa, per ora puoi fare finta che non succeda, o se sei particolarmente curioso puoi già iniziare a dare un'occhiata ai blocchi try-catch-finally ).
xXNicolaXx ha scritto:
Adesso per quanto riguarda il vettore non so proprio da dove partire..ho cercato un po' su internet ma non so proprio come fare. Un conto era partire direttamente da un vettore nella quale ogni elemento che scrivevo veniva subito messo li..ma se devo inserire delle variabili dentro a un vettore non so proprio come fare. Innanzitutto, questo vettore devo farlo nella classe Registrazione o nella classe Passeggero?
Poi, ho bisogno di un costruttore?
Questo però è importante capirlo. Non dovresti assolutamente matterlo nella classe Passeggero, quale sarebbe la logica di avere una serie di passeggeri legati ad ogni singolo Passeggero ?
Nella classe Registrazione va benissimo, per ora hai un'unica istanza di Registrazione e lavori con un solo vettore, ma la logica è che se tu avessi una classe come Volo, di cui creerai più istanze ovviamente, vorrai che ogni Volo abbia il proprio insieme di Passeggeri, quindi il vettore di Passeggeri va inserito in Volo come campo di istanza (non statico).
Non hai bisogno di istanziare il vettore all'interno di un costruttore, va benissimo farlo perché ti permette ad esempio di crearlo con una dimensione che il costruttore riceve in ingresso, ad esempio :
public class Volo
{
private Passeggero[] passeggeri;
public Volo (int massimoPasseggeri) {
passeggeri = new Passeggero[massimoPasseggeri];
}
}
Ma puoi benissimo istanziarlo già nella definizione se hai una dimensione massima fissa (in realtà puoi istanziarlo in qualunque metodo, basta che tu lo faccia prima di provare a inserire/modificare valori all'interno).
Devi cominciare a prendere confidenza con gli array, non puoi proprio andare avanti senza saperli usare, o meglio puoi ma avresti un buco tremendo...
Una volta che il vettore è creato puoi manipolarlo come vuoi, devi sapere come prendere gli elementi all'interno (es. Passeggero secondo = passeggeri[1]), settarli (passeggeri[6] = new Passeggero("Mario", "Rossi")), scambiarli (tipicamente si usa una variabile temporanea, si legge il primo valore e lo si copia nella variabile temporanea, si inserisce al posto del primo il secondo e poi nel secondo si ricopia il valore della variabile temporanea).
Magari queste sono operazioni che hai già fatto in un singolo ciclo, ma devi sapere come farle da qualsiasi metodo/ parte del codice, cercati qualche esercizio online...
xXNicolaXx ha scritto:
Ah, dimenticavo..va bene un semplice array o dovrei usare un arraylist?
Questo l'ho in parte già detto. Le liste vanno benissimo, e dovrai imparare a usare anche quelle. Ti offrono molte funzionalità e per ora ti eviterebbero anche di preoccuparti dell'indice, perché per aggiungere gli elementi basta un add() (anche se puoi richiamarlo con un parametro che specifichi la posizione), e si espandono in automatico, quindi è meno probabile avere una ArrayIndexOutOfBoundsException.
Ma usarle senza aver capito come funzionano gli array nasconde solo il problema, quindi usa prima gli array
xXNicolaXx ha scritto:
per quanto riguarda la domanda che mi avevi fatto su questo codice:
public class Test
{
private class Test1 {
public void toString() {
}
}
private class Test2 {
public String toString() {
return null;
}
public String toString() {
return "Another toString";
}
}
private class Test3 {
private String toString() {
return "Ciao";
}
}
private class Test4 {
public String toString() {
return "Pippo";
}
public String toString(Object object) {
return object.toString();
}
public String toString(int parametroInutile) {
return "5";
}
}
}
mi verrebbe da dire la 3, ma poi sono sicuro sia la 4 perchè è sempre quella più complicata quella giusta
In realtà non avevo specificato che ce n'era una sola di corretta Comunque è la 4, ma anche qui potresti provare a compilare, leggere gli errori, e capire da cosa sono causati.
xXNicolaXx ha scritto:
Edit 2:
Ho provato con un array list...effettivamente mi salva i nomi e i cognomi e me li stampa..l'unica cosa è che vorrei evitare di vedere le parentesi [] nella stampa(ma mi sa che è una cosa degli arraylist. Altra cosa è che riesco a stampare ma solo se creo un metodo stampa interno a Registrazione. Perchè con il toString di Passeggero non riesco a collegarlo.
Non dimenticarti il consiglio di lavorare anche con gli array! Comunque sì, una lista è comoda da stampare, perché basta passarla a uno dei metodi print() e in automatico ricevi la stampa di tutti gli elementi all'interno (che si basa sul toString(), quindi se non l'avessi ridefinito riceveresti una serie di Passeggero@47238473 etc.), separati da virgola e spazio e compresi tra due parentesi quadre.
Questo dipende da come la lista ridefinisce toString(), non puoi farci nulla, ma nulla ti impedisce (anzi fallo!!) di ciclare sugli argomenti di una lista e stamparli uno a uno, decidendo tu come separarli (magari vuoi andare a capo per ogni elemento!).
Tra l'altro per stampare un'array non puoi fare System.out.print(un_qualche_array), non ti stampa gli elementi all'interno, quindi ancora una volta dovresti stampare gli elementi manualmente, con un ciclo (anche se esistono metodi pronti che lo fanno per te).
xXNicolaXx ha scritto:
Intanto ti posto il codice di Registrazione(Passeggero è rimasta invariata) [...]
Prima di tutto sistema i campi di istanza di Registrazione. Hai ancora quel Passeggero p come campo che
non ti serve, toglilo. Dovresti aggiungere come campo l'array se usi quello, altrimenti la lista.
Se usi la lista, intanto deve essere una lista di Passeggero, tu l'hai non l'hai parametrizzata, cosa poco saggia. E poi
non devi aggiungere nome, cognome e altro alla lista!! Tu vuoi una lista di passeggeri, non una lista di nomi a caso ...
Quindi in caso devi
prima creare il nuovo passeggero (con nome e cognome), e
poi aggiungelo alla lista (e non chiamarla v, i nomi dovrebbero essere autoesplicativi, quindi usa passeggeri, listaPasseggeri, elencoPasseggeri o simili).
Anche scelta messo lì serve a poco, ti serve solo all'interno di gestisciOperazioni(), non in tutto il codice...
xXNicolaXx ha scritto:
in realtà credo si possa migliorare e creare un secondo arraylist solo per i cognomi..in modo che poi nella stampa posso fare ad esempio:
System.out.println("Nome : " + v + "Cognome : " + c);
dove v è quello per i nomi e c quello per i cognomi...però prima voglio capire se è corretto
No, non ha alcun senso mantenere liste separate, torneresti come prima a lavorare in parallelo! Tu devi avere un contenitore di Passeggero (array e lista non sono le uniche possibilità), non avere le informazioni slegate e doverle ricomporre in qualche modo.
xXNicolaXx ha scritto:
Poi si si riesce a fare con gli array per evitare di avere le parentesi quadre nella stampa sarebbe meglio...esisto con per gli arraylist dei metodi "add" che quindi inseriscono nel vettore una determinata variabile?
Spero si capisca da quanto detto sopra.
xXNicolaXx ha scritto:
edit 3:
ho provato con un vettore..però me lo stampa tutto null, evidentemente sbaglio nell'inserimento della variabile all'interno
[...]
String nome = tastiera.nextLine();
for(int i=0; i<vett.length; i++){
nome = vett[i];
}
[...]
Allora dovresti aver capito che il vettore di Stringhe non va bene, deve essere un vettore di Passeggero. Per quanto riguarda l'inserimento ho isolato il codice sopra.
Quel pezzo non è sensato, stai assegnando alla stringa nome (che all'inizio contiene il nome inserito da tastiera) il contenuto del vettore vett.
Tu devi fare il contrario, e soprattutto non in un ciclo. Tu vuoi aggiungere un solo passeggero (dopo averlo creato, non devi aggiungere il nome al vettore), non devi fare un ciclo ma un'unica operazione di assegnamento.
Questa è la parte più importante da capire, come fai a sapere in quale indice del vettore inserirai il nuovo passeggero creato? Devi avere una variabile che conti quanti passeggeri hai già inserito, e si incrementi all' inserimento di ogni passeggero (ma dovrai fermarti a un certo punto).
Il metodo stampa() con il vettore invece è corretto, il ciclo lo devi fare proprio in quel modo.