andbin ha scritto:
Tu vuoi che in un file ci siano le informazioni puntuali su certi veicoli ben precisi e con tutti i loro dati, es.
Fiat Panda, city car, 9000 euro, 1000cc, .......
VolksWagen Polo, city car, 14000 euro, 1200cc, ........
O vuoi avere le varie informazioni separate perché vuoi fare .. che so, tutte le combinazioni o estrarre a caso dei valori??
Ho paura che prima di arrivare a un file ben formato come quello ce ne vorranno di messaggi ...
Quello che vorrebbe fare lui è fondamentalmente questo (da quello che ho appreso nella discussione precedente e nell'inizio di questa):
public class Veicolo
{
private String marca;
// ... tutto il resto
public void setMarca () {
if (this instanceof Automobile) {
marca = LetturaDati.scegliMarcaCasualeDa (new BufferedReader (new FileReader ("automobili.txt")));
}
else if (this instanceof Moto) {
marca = LetturaDati.scegliMarcaCasualeDa (new BufferedReader (new FileReader ("moto.txt")));
}
}
}
KuroKami69 ha scritto:
Ah no, i file mi servono SOLO per poter scegliere in maniera casuale alcuni valori dei miei veicoli.
difatti prima leggo il file, creo un array con tutte le marche/modelli, e poi scelgo casualmente un indice dell'array e mi va a impostare marca e modello
allora io ho visto così il progetto:
la mia automobile/moto deve avere tutti i valori scelti a caso, perché altrimenti avrei fatto prima a fare un database.
1 - viene impostata la marca a caso.
2 - a seconda della marca viene scelto a caso il modello tra quelli coerenti
3 - viene scelta una tipologia della macchina, city car, station vagon etc
4 - a seconda della tipologia poi verrà abbinato un prezzo, una massa, una cilindrata, i cavalli, il consumo.
5 - nei file essendoci scaglioni di valori, come hai copiato te la cilindrata, con un random ottengo un valore compreso tra quei range. per esempio se la mia auto è una supersport, allora potrà avere dia 2000 agli 8000 cilindri, poi costerà dai 400 mila al milione e 4, e via dicendo
ora è più chiaro?
@Kurokami69
Allora, ne abbiamo già parlato in qualche modo nell'altra discussione, fino a qui
ci può anche stare.
Vuoi fare un po' il passo più lungo della gamba, nel senso che non ti sono ancora chiare questioni basilari e vuoi un po' "strafare", leggendo da file, usando strutture dati che magari avrai visto 1/2 volte (non puoi andare avanti con 1/2 array), collegando le varie cose in modo casuale ma "sensato", vuoi imparare sbattendo la testa e questo può essere accettato, non dico sia sbagliato.
Ma se vuoi andare avanti così, perlomeno ascolta i nostri consigli. Nell'altra discussione avevamo già cercato di farti capire che una classe come Automobile non può avere tutta la logica che stavi cercando di darle, ora @andbin te l'ha spiegato ancora meglio,
ascoltalo.
Quel codice che ho messo sopra è una delle più grandi schifezze che avrei mai potuto scrivere, non andrai mai avanti se provi a fare cose di quel tipo, spero che vedendolo tu possa capire, e il modo di far le cose che vorremmo suggerirti, oltre a essere corretto, a non causarti ogni sorta di problemi, è anche più semplice
Cerca di capire, non voglio assolutamente essere spocchioso o abbatterti, ma ci stiamo dando un gran da fare per aiutarti e non puoi andare in quella direzione!
KuroKami69 ha scritto:
detto questo, avevo 2 strade
1) fare una classe chiamata, che ne so, modelClass, in cui ci ficcavo dentro tutte le marche di moto e di auto in 2 array distinti e poi con un metodo prendevo il valore casuale e lo ritornavo, e poi quel metodo lo chiamavo nel costruttore di auto/moto/veicolo (all'inizio avevo solo automobili su cui lavorare). e questo voleva dire fare una classe apposta per la tipologia di auto, ecc ecc
2) fare un file da leggere ogni volta che fosse necessario, ed estrarre automaticamente un valore casuale dall'array creato.
1) No, No, NO. Non sarà mai il costruttore di Automobile/Moto o Veicolo a dover richiamare un metodo di quel tipo, l'abbiamo già detto, non è la macchina singola che decide quale marca avrà, non ha alcun senso, la classe veicolo e le sue sottoclassi ricevono semplicemente i dati dall'esterno, non devono preoccuparsi di altro.
Puoi metterci tutta la casualità che vuoi, ma non in quelle classi.
2) No anche questa volta. Il file non viene letto ogni volta che è necessario, che nel tuo caso vorrebbe dire ogni volta che crei un'automobile, non ha senso, è moltissimo inefficiente, e fonte di errori, il file può essere cancellato/modificato in esecuzione, possono esserci IOExceptions e quant'altro.
Ogni file devi leggerlo
una sola volta, e salverai i dati in strutture appropriate. Una volta che hai la tua collezione di dati puoi fare quello che vuoi, es. una classe CostruttoreAutomobile che in base a tutte le informazioni salvate all'interno ha un metodo creaAutomobileCasualmente che prende tutti i valori a caso, magari con una certa logica di fasce che suggerivi, e li passa al costruttore di Automobile o Moto, o se non vuoi un costruttore con 20 e più parametri passa solo i valori "essenziali" e poi chiama i vari set.
Ma i set li chiami con i dati già pronti, non li scegli all'interno (il massimo che potresti fare è inserire dei valori "di default", ma a livello di classe, in questo caso comunque non si applica bene al contesto), spero che questo sia chiaro, altrimenti dobbiamo fermarci qui e convincerti, non vai davvero da nessuna parte sennò!