Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da sappe Visualizza il messaggio
    /*perché non posso usare veicoliV.length? Se veivoliV è un array, dovrei poter interagire su di esso e sulle sue posizioni, no? Perché non posso?*/
    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!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it L'avatar di sappe
    Registrato dal
    May 2011
    Messaggi
    19
    Quote Originariamente inviata da andbin Visualizza il messaggio
    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!

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da sappe Visualizza il messaggio
    codice:
    public class Spettacolo {
        // ....
        private Persona [] spettatori ;
        private int postiPrenotati = 0;
        private static final int CAPIENZA =100;
    
        public Spettacolo ( String titolo , String compagnia , String dataora ) {
            // ....
            this . spettatori = new Persona [ CAPIENZA ];
        }
    
        public int postiDisponibili () {
            return CAPIENZA - postiPrenotati ;
        }
    
        public boolean prenota ( Persona spettatore ) {
            if ( postiDisponibili () >0) {
                spettatori [ postiPrenotati ] = spettatore ;
                postiPrenotati ++;
                return true ;
            }
            else return false ;
        }
    
        // ....
    }
    Ho quotato nel codice solo le parti rilevanti. Il concetto che hai applicato per gestire l'insieme delle Persone per lo Spettacolo, è sensato e corretto!

    Cioè tenere un array, tenere il numero "logico" di elementi occupati e poi nel prenota assegnare il Persona al posto corrente e aumentare il numero di posti prenotati (che sarà l'indice del successivo Persona).
    Tutto questo ti ripeto che l'hai fatto giusto. Se non si usano le "collezioni", questo è il modo basilare e minimale per gestire un insieme di oggetti che cresce con un limite fisico massimo (se volessi che sia espandibile a piacere in modo arbitrario, chiaramente serve altra logica in più ma sicuramente non è l'obiettivo degli esercizi che stai facendo).

    La questione della classe Veicolo è diversa, principalmente a livello concettuale. Una classe Veicolo denota una singola entità, appunto 1 veicolo. Non ha senso che Veicolo contenga un array di N veicoli. Invece una classe es. Garage o Parcheggio ha senso che abbia N veicoli. E li puoi gestire esattamente come hai fatto per Spettacolo, che ti ribadisco, è appropriata come gestione.


    P.S. cura solo di più lo stile di scrittura. Vedo "troppi" spazi superflui.
    Ultima modifica di andbin; 02-02-2016 a 19:42
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di sappe
    Registrato dal
    May 2011
    Messaggi
    19
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ho quotato nel codice solo le parti rilevanti. Il concetto che hai applicato per gestire l'insieme delle Persone per lo Spettacolo, è sensato e corretto!
    Ci credo è corretto, è quello che ci ha dato il professore come esempio

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Tutto questo ti ripeto che l'hai fatto giusto. Se non si usano le "collezioni", questo è il modo basilare e minimale per gestire un insieme di oggetti che cresce con un limite fisico massimo (se volessi che sia espandibile a piacere in modo arbitrario, chiaramente serve altra logica in più ma sicuramente non è l'obiettivo degli esercizi che stai facendo).

    La questione della classe Veicolo è diversa, principalmente a livello concettuale. Una classe Veicolo denota una singola entità, appunto 1 veicolo. Non ha senso che Veicolo contenga un array di N veicoli. Invece una classe es. Garage o Parcheggio ha senso che abbia N veicoli. E li puoi gestire esattamente come hai fatto per Spettacolo, che ti ribadisco, è appropriata come gestione.
    La cosa che mi creava dubbi principalmente era che il professore non aveva minimamente accennato ad altre classi nel testo dell'esercizio beh l'ho risolto, grazie al tuo consiglio che mi ha permesso di arrivare ad una soluzione più logica per i posteri, ecco la soluzione con una classe Garage:
    codice:
    public class Garage {
    	private Veicolo[] garage;
    	private int postiOccupati = 0;
    	private static final int CAPIENZA =100;
    	public Garage(){
    		this.garage = new Veicolo[CAPIENZA];
    	}
    	public int postiDisponibili () {
    		return CAPIENZA - postiOccupati;
    		}
    	
    	public boolean occupa(Veicolo postoLibero) {
    		if ( postiDisponibili () >0) {
    		garage[postiOccupati] = postoLibero;
    		postiOccupati++;
    		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< postiOccupati; i ++) {
    	garage[i].stampaTarga();
    	}
    	}
    	
    }
    codice:
    public class UsaVeicoli {
    	public static void main ( String args []) {
    		
    		Garage g = new Garage();
    		
    		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 = g.occupa(v1);
    	    boolean ok2 = g.occupa(mot1);
    	    boolean ok3 = g.occupa(veic2);
    	    boolean ok4 = g.occupa(vett1);
    	    
    	    if (!ok1 || !ok2 || !ok3 ){
    	    	System.out.println("Ci sono dei problemi con i tuoi veicoli!");
    	    }
    	    
    	    g.stampaElencoVeicoli();
    	    
    	}
    }
    Ovviamente la classe Veicolo cambia di conseguenza, e al suo interno si tolgono tutte le porzioni di codice che servono a creare un array, che sono nel garage.

    Grazie ancora della tua disponibilità e del tuo aiuto!

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.