
Originariamente inviata da
andbin
Il punto è che veicoliV è un campo "di istanza" di Veicolo, quindi ciascuna istanza di Veicolo (o sottoclasse) ha il suo array. E quindi ha senso? Direi proprio di no!
Scusami, io è giorni che continuo a studiarmi e ristudiarmi questi argomenti, e continuo a confondermi sempre di più. Mi puoi dare per favore degli esempi validi di esercizi simili se li conosci? O farmi anche un esempio di risoluzione generale di un esercizio simile?
Non ti chiedo di risolvermi questo ovviamente, però dall'esempio che ci ha dato il professore non riesco a ricavare soluzioni simili.
Non riesco proprio a capire come aggiungere gli oggetti che creo a un array che posso utilizzare.
Ti mostro gli esempi del professore: estendendo la classe persona ha creato le classi Professore e Studente (che ometto, sono simili a esempi standard che si trovano in giro). Poi ha creato la classe Spettacolo:
codice:
public class Spettacolo {private String titolo ; // titolo dello spettacolo
private String compagnia ; // compagnia teatrale
private String dataora ; // data e ora spettacolo
// array che contiene gli spettatori ( classe Persona )
private Persona [] spettatori ;
// contatore dei posti prenotati ( inizialmente zero )
private int postiPrenotati = 0;
// costante condivisa che indica la capienza del teatro
private static final int CAPIENZA =100;
// costruttore
public Spettacolo ( String titolo , String compagnia ,
String dataora ) {
this . titolo = titolo ;
this . compagnia = compagnia ;
this . dataora = dataora ;
// inizializza l'array ( inizialmente pieno di null )
this . spettatori = new Persona [ CAPIENZA ];
}
//restituisce il numero di posti ancora disponibili
public int postiDisponibili () {
return CAPIENZA - postiPrenotati ;
}
//consente di prenotare un nuovo posto
//restituisce false se non ci sono posti disponibili
public boolean prenota ( Persona spettatore ) {
if ( postiDisponibili () >0) {
spettatori [ postiPrenotati ] = spettatore ;
postiPrenotati ++;
return true ;
}
else return false ;
}
//stampa l'elenco delle prenotazioni
public void stampaPrenotazioni () {
System . out . println (" Spettacolo " + titolo );
System . out . println (" Del " + dataora );
System . out . println (); // riga vuota
for (int i =0; i< postiPrenotati ; i ++) {
spettatori [i]. visualizza ();
}
}
}
e la classe UsaSpettacolo2:
codice:
public class UsaSpettacolo2 {public static void main ( String args []) {
// crea una persona , uno studente e un professore
Persona pers = new Persona (" Mario Rossi ","Via Garibaldi 23");
Studente stud = new Studente (" Gianni Bianchi "," Via Gramsci 88");
Professore prof = new Professore (" Luca Neri "," Via Belli 11",
" a11233 "," Dip . Matematica ");
// crea uno spettacolo
Spettacolo s = new Spettacolo (" Macbeth "," Attori dilettanti ",
" 25/12/2013 - 21.00 ");
// prenota posti per tutti
boolean ok1 = s. prenota ( pers );
boolean ok2 = s. prenota ( stud );
boolean ok3 = s. prenota ( prof );
// controlla che sia andato tutto bene
if (! ok1 || ! ok2 || ! ok3 ) System . out . println (" Problemi ...");
// stampa l'elenco delle prenotazione
s. stampaPrenotazioni ();
// stampa i posti ancora disponibili
System . out . println (" Posti disponibili : " +s. postiDisponibili ());
}
}
Io partendo da questi esempi non riesco a risolvere gli esercizi, cioè non riesco ad astrarre come aggiungere gli elementi che ho creato all'array; logicamente, leggendo e provando gli esercizi che ha dato, lo capisco, ma non credo riesco ad applicarlo in altri contesti! Non posso creare un array in UsaVeicoli (come chiede l'esercizio, tra l'altro), o posso?
Guardando l'esempio del professore ho cercato un po' di riscrivere le mie classi, ma arrivo sempre a non saper scrivere UsaVeicoli, incollo solo la classe Veicolo e la classe UsaVeicoli dato che Motociclo e Vettura non cambiano:
codice:
import java.util.Random;public class Veicolo {
private int targa;
private String marca;
private String modello;
private boolean guasto;
Random random = null;
private static final int numVeicoli =100;
private int postiInOfficina = 0;
//inserire costruttore
private Veicolo[] veicoli;
public Veicolo (int targa, String marca, String modello, boolean guasto){
this.targa = targa;
this.marca = marca;
this.modello = modello;
this.guasto = guasto;
this.veicoli = new Veicolo[numVeicoli];
}
//get informazioni
public int getTarga(){ return targa; }
public String getMarca() { return marca; }
public String getModello() { return modello; }
public boolean getGuasto() { return guasto; }
public boolean randomGuasto() {
guasto = random.nextBoolean();
return guasto;
}
public int postiDisponibili () {
return numVeicoli - postiInOfficina;
}
public void stampaTarga(){
if (guasto == true){
System.out.println("Questo veicolo è guasto: " + getTarga());
}
}
//inserisci nell'array di Veicoli
public boolean inserisci(Veicolo veicoliV) {
if ( postiDisponibili () >0) {
veicoli[postiInOfficina] = veicoliV;
postiInOfficina++;
return true ;
}
else return false ;
}
//stampa l'elenco dei veicoli
public void stampaElencoVeicoli() {
System.out.println("Elenco delle targhe dei veicoli guasti:");
for (int i =0; i< postiInOfficina; i ++) {
veicoli [i].stampaTarga();
}
}
}
codice:
public class UsaVeicoli { public static void main ( String args []) {
Veicolo v1 = new Veicolo(54627, "Fiat", "Panda", false);
Motociclo mot1 = new Motociclo(4853, "Audi", "smart", false, 150);
Veicolo veic2 = new Veicolo(7683, "Fiat", "panda", false);
Vettura vett1 = new Vettura(67894, "Volvo", "sportivo", true, "SUV");
boolean ok1 = veicoliV.inserisci(v1);//e veicoliV è sempre sbagliato, o qualsiasi altra cosa provi a scriverci :(
}
}
Grazie in anticipo se vorrai aiutarmi, e della tua pazienza
spero di essermi spiegata bene!