Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12

    Aiuto con una simulazione di gara di formula 1?

    Ciao a tutti, avrei bisogno di aiuto con un esercizio che sto cercando di fare. Come si capisce dal titolo � una simulazione di una gara di formula 1, la logica del programma � teoricamente semplice, per� il programma a girare non ci pensa nemmeno (avr� degli errori assurdi).
    Comunque il programma � composto da 5 classi: Vettura (classe astratta) da cui viene derivata monoposto, la classe driver che viene derivata da monoposto e infine track che � la classe da cui viene derivata race in cui c'� il main. Quello che voglio fare � dare una variabile points a monoposto (che devono risultare anche su piloti) a cui viene assegnato un valore random inziale (startpoints) e che viene incrementato ciclicamente per il numero di giri tramite la variabile random (increment).
    Questi punteggi devono essere assegnati ad un array di sei piloti e alla fine quello con il punteggio piu alto vince la gara.

    Allego il codice che o scritto finora e spero che possiate aiutarmi

    la classe DRIVER

    codice:
    public class Driver extends Monoposto{    private String name;
        private String surname;
        private int age;
        
        
        public Driver(String name, String surname){
            setName(name);
            setSurname(surname);
        }
    
    
    
    
        public String getName(){
            return name;    
        }
    
    
        public void setName (String name){
            this.name = name;    
        }
    
    
        public String getSurname(){
            return surname;    
        }
    
    
        public void setSurname (String surname){
            this.surname = surname;    
        }
    
    
        public int getAge(){
            return age;    
        }
    
    
        public void setAge (int age){
            this.age = age;    
        }
    
    
    
    
    }

    la classe MONOPOSTO

    codice:
    public class Monoposto extends Vettura{          
            
                    
            
            public Monoposto(int hp){
                setHp(hp);
                setMaxspeed(340);        
                setPoints(0); 
                    
            }
            
            public void turnOn(){
                System.out.println("Brum, brum");
            }
    la classe VETTURA

    codice:
    public abstract class Vettura{    private int hp;
        private int maxspeed;
        private int points;
            
            
        
    
    
    
    
        public abstract void turnOn();
        
            
        public void setHp(int hp){
            this.hp = hp;
        }
            
        public int getHp(){
            return hp;
        }
        
            
        public void setMaxspeed(int maxspeed){
            this.maxspeed = maxspeed;
        }
            
        public int getMaxspeed(){
            return maxspeed;
        }
    
    
        public void setPoints(int points){
            this.points = points;
        }
            
        public int getPoints(){
            return points;
        }
    
    
        
        
        
        
        
    }
    la classe TRACK

    codice:
    public class Track{    private String name;    
        private String nation;    
        private int laps;
        
            
            public Track(String name, String nation, int laps){
                setName(name);
                setNation(nation);        
                setLaps(laps);
            } 
    
    
    
    
            public String getName(){
                return name;    
            }
            
            public void setName(String name){
                this.name = name;    
            }
              
            public String getNation(){
                return nation;    
            }
            
            public void setNation(String nation){
                this.nation = nation;    
            }
    
    
            public int getLaps(){
                return laps;    
            }
            
            public void setLaps(int laps){
                this.laps = laps;    
            }
    
    
        
        
    }
    e infine la classe RACE

    codice:
    import java.util.Random;public class Race{
            
            
                 
            
         public static void main(String []args){
                     
            Random start = new Random();//punteggio inziale
            Random km = new Random();//punteggio per giro
            int startpoints = start.nextInt(100); //variabile con punteggi di partenza
            int increment = km.nextInt(100);     //sar� la variabile a cui verranno aggiunti i numeri random 
            
            
           
    
    
    
    
    
    
    
    
            Driver[] drivers = new Driver[6];                          
            
            drivers[0] = new Driver ("Kimi", "Raikkonen");
            drivers[1] = new Driver ("Sebastian", "Vettel");
            drivers[2] = new Driver ("Fernando", "Alonso");        
            drivers[3] = new Driver ("Sergio", "Perez");
            drivers[4] = new Driver ("Nico", "Rosberg");
            drivers[5] = new Driver ("Louis", "Hamilton");
        
            
    
    
            Track monza = new Track("Monza", "Italy", 70);             
            System.out.println("Welcome to the " + monza.getName() + " " + "grand prix");
                
            
            
            
                
                
            Monoposto macchina = new Monoposto(600);
             
            macchina.turnOn();                         
            System.out.println("    3...");               
            System.out.println("    2...");               
                System.out.println("    1...");              
            System.out.println("   GO!   ");             
                                        
             
            
        for (int i = 0; i < drivers.length; i++){                                                                        
               macchina.setPoints(startpoints);                
                                    
        }
                                    
        for (int i = 0; i < monza.getLaps(); i++){
            macchina.setPoints(increment);
            System.out.println("Lap: " + i);
            
                }
            
                 
            
            
            switch (Math.max(macchina.getPoints())) { 
             case 1:
               System.out.println("The winner is " + drivers[0].getName() + " " + drivers[0].getSurname());
                 break;
             case 2:
               System.out.println("The winner is " + drivers[1].getName() + " " + drivers[1].getSurname());
                 break;
             case 3:
               System.out.println("The winner is " + drivers[2].getName() + " " + drivers[2].getSurname());
                 break;
             case 4:
               System.out.println("The winner is " + drivers[3].getName() + " " + drivers[3].getSurname());
                 break;
             case 5:
               System.out.println("The winner is " + drivers[4].getName() + " " + drivers[4].getSurname());
                 break;
             case 6:
               System.out.println("The winner is " + drivers[5].getName() + " " + drivers[5].getSurname());
                 break;
             default:
                System.out.println("Tutti fredd'uccisi in due divisi");
            }
    
    
    
    
    
    
    
    
        
              
            }
            
    
    
            
            
                
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    La prima cosa che mi viene da dire sul design creato è che Driver non dovrebbe assolutamente estendere Monoposto !
    Le classi di solito cercano di riflettere il più possibile il contesto di riferimento, oltre all'ovvio fatto che un pilota non è una macchina, non ottieni alcun beneficio da questo tipo di ereditarietà, Driver eredita dei metodi (come setMaxSpeed e turnOn) di cui non se ne fa assolutamente nulla.

    In quanto alla variabile points, se nel tuo contesto rappresenta "l'avanzamento nella gara", allora dovrebbe essere una variabile di Monoposto, se invece fossero ad esempio i punti nel mondiale, meglio assegnare la variabile a Driver.

    Cerca quindi di distinguere i compiti delle varie classi innanzitutto.

    Riguardo al resto del codice, che io sappia è abbastanza inusuale richiamare nel costruttore i metodi set per assegnare i valori, di solito l'assegnazione avviene direttamente.

    Per quanto riguarda la gara infine, ci sono diverse cose poco sensate.
    Innanzitutto non hai bisogno di creare due oggetti Random diversi, uno è sufficiente.
    E poi l'estrazione dei numeri casuali avviene un'unica volta, all'inizio del main, in questo modo avrai valori uguali per tutte le macchine, non mi pare molto sensato...

    Ultima cosa: con l'istruzione all'interno dello switch, prendi il valore massimo tra i punti assegnati alle macchine (che sono casuali), non l'indice del vettore a cui è assegnato il valore massimo dei punti, quindi all'interno entrerai praticamente sempre nel "default"...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    La prima cosa che mi viene da dire sul design creato è che Driver non dovrebbe assolutamente estendere Monoposto !
    Le classi di solito cercano di riflettere il più possibile il contesto di riferimento, oltre all'ovvio fatto che un pilota non è una macchina, non ottieni alcun beneficio da questo tipo di ereditarietà, Driver eredita dei metodi (come setMaxSpeed e turnOn) di cui non se ne fa assolutamente nulla.

    In quanto alla variabile points, se nel tuo contesto rappresenta "l'avanzamento nella gara", allora dovrebbe essere una variabile di Monoposto, se invece fossero ad esempio i punti nel mondiale, meglio assegnare la variabile a Driver.

    Cerca quindi di distinguere i compiti delle varie classi innanzitutto.

    Riguardo al resto del codice, che io sappia è abbastanza inusuale richiamare nel costruttore i metodi set per assegnare i valori, di solito l'assegnazione avviene direttamente.

    Per quanto riguarda la gara infine, ci sono diverse cose poco sensate.
    Innanzitutto non hai bisogno di creare due oggetti Random diversi, uno è sufficiente.
    E poi l'estrazione dei numeri casuali avviene un'unica volta, all'inizio del main, in questo modo avrai valori uguali per tutte le macchine, non mi pare molto sensato...

    Ultima cosa: con l'istruzione all'interno dello switch, prendi il valore massimo tra i punti assegnati alle macchine (che sono casuali), non l'indice del vettore a cui è assegnato il valore massimo dei punti, quindi all'interno entrerai praticamente sempre nel "default"...
    Grazie per l'aiuto, perdona gli erroracci ma ho cominciatio da poco a studiare java come autodidatta, e non pare stia venendo troppo bene :asd:

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12

    Codice modificato

    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    La prima cosa che mi viene da dire sul design creato è che Driver non dovrebbe assolutamente estendere Monoposto !
    Le classi di solito cercano di riflettere il più possibile il contesto di riferimento, oltre all'ovvio fatto che un pilota non è una macchina, non ottieni alcun beneficio da questo tipo di ereditarietà, Driver eredita dei metodi (come setMaxSpeed e turnOn) di cui non se ne fa assolutamente nulla.

    In quanto alla variabile points, se nel tuo contesto rappresenta "l'avanzamento nella gara", allora dovrebbe essere una variabile di Monoposto, se invece fossero ad esempio i punti nel mondiale, meglio assegnare la variabile a Driver.

    Cerca quindi di distinguere i compiti delle varie classi innanzitutto.

    Riguardo al resto del codice, che io sappia è abbastanza inusuale richiamare nel costruttore i metodi set per assegnare i valori, di solito l'assegnazione avviene direttamente.

    Per quanto riguarda la gara infine, ci sono diverse cose poco sensate.
    Innanzitutto non hai bisogno di creare due oggetti Random diversi, uno è sufficiente.
    E poi l'estrazione dei numeri casuali avviene un'unica volta, all'inizio del main, in questo modo avrai valori uguali per tutte le macchine, non mi pare molto sensato...

    Ultima cosa: con l'istruzione all'interno dello switch, prendi il valore massimo tra i punti assegnati alle macchine (che sono casuali), non l'indice del vettore a cui è assegnato il valore massimo dei punti, quindi all'interno entrerai praticamente sempre nel "default"...

    Ciao, alla fine appena ho avuto tempo ho modificato un po' il programma, ma purtroppo ancora non funziona. Sapresti dirmi perché?
    Le modifiche sostanziali le ho fatte nella classe race, da cui ho tolto il main e l'ho messa su una classe application, poi ho tolto l'ereditarietà tra monoposto e driver e ho fatto in modo che la macchina sia assegnata al pilota (almeno credo, ma temo sia proprio li l'errore) di seguito metto il codice modificato
    codice:
    import java.util.Random;
    public class Race{
    	public  Driver[] drivers;
    	public  Monoposto[] cars;   
    
    
    	Track monza = new Track("Monza", "Italy", 70);
    	    
    
    
    
    
    		
    		
    		
                public void startRace(){
    		monza.announceTrack();
    		System.out.println("    3...");			   
    		System.out.println("    2...");			   
    	        System.out.println("    1...");			  
    	        System.out.println("   GO!   ");     
    		
    		for(int i = 0; i < cars.length; i++){		  
    			cars[i].turnOn();					     
    		}   		 
    									
     	        for (int b = 0; b < cars.length; b++){ 
    		        Random increment = new Random();                                                                       
    		        cars[b].setPoints(increment.nextInt(100));				
    							
    	       }
    	    }   
          	   
    	    
    		
                    
    
    
    	    public void findWinner(){	
    		for (int i = 0; i < monza.getLaps(); i++){
    		     for (int z = 0; z < cars.length; z++){ 
    		         Random increment = new Random();                                                       
    			 cars[z].setPoints(cars[z].getPoints() + increment.nextInt(100));	      									
    	              }
    		System.out.println("Lap: " + i);
    		
                     }
    		
    
    
    		 int max = 0;
    		 Driver[] winner = new Driver[1]; 
    		 System.out.println("\n");
    		 System.out.println("Ranking");
    		
    	       for (int i = 0; i < cars.length; i++){ //errore null pointer exception
    			System.out.println(cars[i].getDrivers());
    				
    			if (max <= cars[i].getPoints()){
    				max = cars[i].getPoints();
    				winner = cars[i].getDrivers();
    			}
    		
    		System.out.println("The winner is " + winner);				
    	       }
                }
    	        
    
    
    
    
    		
    		
    	    }
         
    *                                      *                                              *
    
    
    public class Application{
    	 
    	public static void main(String []args){
    		
    		Driver[] drivers = new Driver[6];                          
    	    
    	        drivers[0] = new Driver ("Kimi", "Raikkonen");
    	        drivers[1] = new Driver ("Sebastian", "Vettel");
    	        drivers[2] = new Driver ("Fernando", "Alonso");        
    	        drivers[3] = new Driver ("Sergio", "Perez");
    	        drivers[4] = new Driver ("Nico", "Rosberg");
    	        drivers[5] = new Driver ("Louis", "Hamilton");
    
    
    
    
    	        Monoposto[] cars = new Monoposto[6];
    	    
    	        cars[0] = new Monoposto ("Ferrari I", drivers);	
    	        cars[1] = new Monoposto ("Ferrari II", drivers);
    	        cars[2] = new Monoposto ("Mclaren I", drivers);
    	        cars[3] = new Monoposto ("Mclaren II", drivers);
    	        cars[4] = new Monoposto ("Mercedes I", drivers);
    	        cars[5] = new Monoposto ("Mercedes II", drivers);
    
    
    				
    	
    		Race grandprix = new Race();
    		grandprix.startRace(); //errore null pointer exception
    		grandprix.findWinner();
    		
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    }
    } 
    
    **                                                   *                                      * 
    
    
    
    
    public class Monoposto extends Vettura{
      		
    		
    		public Monoposto(){
    		
    		}
    		
    		public Monoposto(String name, Driver[] drivers){
    			setName(name);			
    			setHp(600);
    			setMaxspeed(340);		
    			setPoints(0); 
    			setDrivers(drivers);	
    		}
    		
    		
    		
    
    
    		public void turnOn(){
    			System.out.println(getName() + "Brum, brum");
    		}   
    		
    		
    
    
    
    
    
    
    
    
    
    
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da luca125 Visualizza il messaggio
    Ciao, alla fine appena ho avuto tempo ho modificato un po' il programma, ma purtroppo ancora non funziona. Sapresti dirmi perchè?
    Per le prossime volte ricordati che dire "non funziona" è troppo generico, specifica meglio i problemi che riscontri, che siano eccezioni a runtime (vedo che nei commenti parli di NullPointerException), o comportamenti inaspettati del programma.

    Il codice che hai inserito però è incompleto e abbastanza incasinato (troppe righe vuote e indentamento confusionario), posta un codice che sia possibile compilare ed eseguire, così si fa molto prima a trovare gli errori...

    Ecco comunque alcune cose che si notano subito:

    - Non è corretto passare a Monoposto nel costruttore un vettore di oggetti Driver, Monoposto deve contenere un solo Driver, questo è abbastanza ovvio...
    - Non dovresti costruire più Random, come detto ne basta uno, ma se non vuoi assegnarlo a una variabile di Race (e usare poi quello nei diversi metodi), almeno crealo all'inizio dei vari metodi ma comunque fuori dai cicli...

    In generale poi quando ottieni eccezioni a runtime dovresti fare una sorta di "debug" in cui stampi i valori di tutte le variabili che possono causare l'eccezione, e poi risali indietro fino al momento dell'assegnazione dei valori per capire come mai sono ancora null: quasi sempre ti sarai dimenticato di inizializzare la variabile o starai eseguendo un metodo su di essa prima di averla creata, poi ci sono anche altri casi ovviamente.

    Se posti il codice completo comunque ti posso dire molto di più

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    Per le prossime volte ricordati che dire "non funziona" � troppo generico, specifica meglio i problemi che riscontri, che siano eccezioni a runtime (vedo che nei commenti parli di NullPointerException), o comportamenti inaspettati del programma.

    Il codice che hai inserito per� � incompleto e abbastanza incasinato (troppe righe vuote e indentamento confusionario), posta un codice che sia possibile compilare ed eseguire, cos� si fa molto prima a trovare gli errori...

    Ecco comunque alcune cose che si notano subito:

    - Non � corretto passare a Monoposto nel costruttore un vettore di oggetti Driver, Monoposto deve contenere un solo Driver, questo � abbastanza ovvio...
    - Non dovresti costruire pi� Random, come detto ne basta uno, ma se non vuoi assegnarlo a una variabile di Race (e usare poi quello nei diversi metodi), almeno crealo all'inizio dei vari metodi ma comunque fuori dai cicli...

    In generale poi quando ottieni eccezioni a runtime dovresti fare una sorta di "debug" in cui stampi i valori di tutte le variabili che possono causare l'eccezione, e poi risali indietro fino al momento dell'assegnazione dei valori per capire come mai sono ancora null: quasi sempre ti sarai dimenticato di inizializzare la variabile o starai eseguendo un metodo su di essa prima di averla creata, poi ci sono anche altri casi ovviamente.

    Se posti il codice completo comunque ti posso dire molto di pi�

    Guarda mi dispiace tanto per la confusione, purtroppo il problema di imparare le cose da soli � che si impara con lacune... e mi dispiace che ti sto assillando da un po' ormai

    Comunque il codice l'ho cambiato di nuovo alla fine, i due array erano confusionari quindi ho tolto l'array drivers e ho lasciato solamente cars, dentro il quale ho istanziato i piloti. ora il programma funziona, a parte il fatto che non stampa i nomi dei piloti, ma stampa:

    Driver@6d06d69c
    Driver@7852e922
    Driver@4e25154f
    Driver@70dea4e
    Driver@5c647e05
    Driver@33909752
    The winner is Driver@7852e922

    L'errore penso sia piccolo, ma io ormai ci sto impazzendo dietro a questo programma

    comunque eccoti il codice completo:

    codice:
    public class Application {
    	public static void main(String []args){
    		
    		
    
    
            Monoposto[] cars = new Monoposto[6];
    
    
    	    cars[0] = new Monoposto ("Ferrari I", new Driver ("Kimi", "Raikkonen"));	
            cars[1] = new Monoposto ("Ferrari II", new Driver ("Sebastian", "Vettel"));
            cars[2] = new Monoposto ("Mclaren I", new Driver ("Fernando", "Alonso")); 
            cars[3] = new Monoposto ("Mclaren II", new Driver ("Sergio", "Perez"));
            cars[4] = new Monoposto ("Mercedes I", new Driver ("Nico", "Rosberg"));
            cars[5] = new Monoposto ("Mercedes II", new Driver ("Louis", "Hamilton"));
    
    
    
    
    	Race grandprix = new Race();
    	Track track = new Track("Monza", "Italy", 70);
    	grandprix.setTrack(track);		
    	
    	grandprix.setCars(cars);		
    	grandprix.startRace();
    	grandprix.findWinner();
    	
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    }
    } 
    
    
    ***                                            ***                                 ***
    
    import java.util.Random;
    public class Race {
    	
    	
    		
    		private  Monoposto[] cars;   
    		Track track;
    		
    		    
    
    
    
    
    			
    			
    			
    	        public void startRace(){
    				track.announceTrack();
    				System.out.println("    3...");			   
    				System.out.println("    2...");			   
    			    System.out.println("    1...");			  
    			    System.out.println("   GO!   ");     
    											
    		 	        for (int i = 0; i < cars.length; i++){ 
    						cars[i].turnOn();		        
    						Random increment = new Random();                                                                       
    				        cars[i].setPoints(increment.nextInt(100));				
    									
    			       }
    			    }   
    	      	   
    		    
    			
    	                
    
    
    		    public void findWinner(){	
    			for (int i = 0; i < track.getLaps(); i++){
    			     for (int z = 0; z < cars.length; z++){ 
    			         Random increment = new Random();                                                       
    				 cars[z].setPoints(cars[z].getPoints() + increment.nextInt(100));	      									
    		              }
    			System.out.println("Lap: " + i);
    			
    	                 }
    			
    
    
    			 int max = 0;
    			 Driver winner = new Driver(); 
    			 System.out.println("\n");
    			 System.out.println("Ranking");
    			
    		       for (int i = 0; i < cars.length; i++){
    				 System.out.println(cars[i].getDriver());
    					
    				if (max <= cars[i].getPoints()){
    					max = cars[i].getPoints();
    					winner = cars[i].getDriver();
    				}
    			
    					
    		       }System.out.println("The winner is " + winner);		
    	            }
    		        
    			public void setCars(Monoposto[] cars){
    				this.cars = cars;
    
    
    			} 		 
    			
    			public Monoposto[] getCars(){
    				return cars;
    
    
    			}
    
    
    			public void setTrack(Track track){
    				this.track = track;		
    			}
    			
    			public Track getTrack(){
    				return track;
    
    
    			}
    	}
    	     
    
    
    ***                                    ***                                 ***
    
    public abstract class Vettura {
    	private String name;	
    	private int hp;
    	private int maxspeed;
    	private int points;
        private Driver driver;
        	
    	
    	public abstract void turnOn();
    	
    	public String getName(){
    		return name;	
    	}
    
    
    	public void setName (String name){
    		this.name = name;	
    	}
    
    
    	public void setDriver(String name, Driver driver){
    		this.name = name;
    		this.driver = driver;
    
    
    	} 		     
    	
    	public void setHp(int hp){
    		this.hp = hp;
    	}
        	
    	public int getHp(){
    		return hp;
    	}
    	
    		
    	public void setMaxspeed(int maxspeed){
    		this.maxspeed = maxspeed;
    	}
        	
    	public int getMaxspeed(){
    		return maxspeed;
    	}
    
    
    	public void setPoints(int points){
    		this.points = points;
    	}
        	
    	public int getPoints(){
    		return points;
    	}
    
    
    	public void setDriver(Driver driver){
    		this.driver = driver;
    
    
    	} 		 
    		
    	public Driver getDriver(){
    		return driver;
    
    
    	} 
        
        
        
        
    }
    
    
    ***                                ***                                  ***
    
    public class Monoposto extends Vettura{
      		
    		
    		public Monoposto(){
    		
    		}
    
    
    		public Monoposto(String name){
    			setName(name);			
    			setHp(600);
    			setMaxspeed(340);		
    			setPoints(0); 
    				
    		}  	
    		
    		public Monoposto(String name, Driver driver){
    			setName(name);			
    			setHp(600);
    			setMaxspeed(340);		
    			setPoints(0); 
    			setDriver(driver);	
    		}  		
    		
    		
    
    
    		public void turnOn(){
    			System.out.println(getName() + "Brum, brum");
    		}   
    		
    		
    
    
    
    
    
    
    
    
    
    
    }
    
    
    ****                                           ***                                  ***
    
    public class Driver {
    	
    		private String name;
    		private String surname;
    		private int age;
    		
    		public Driver(){
    
    
    		}
    
    
    
    
    		public Driver(String name, String surname){
    		    setName(name);
    		    setSurname(surname);
    		}
    
    
    
    
    		public String getName(){
    			return name;	
    		}
    
    
    		public void setName (String name){
    			this.name = name;	
    		}
    
    
    		public String getSurname(){
    			return surname;	
    		}
    
    
    		public void setSurname (String surname){
    			this.surname = surname;	
    		}
    
    
    		public int getAge(){
    			return age;	
    		}
    
    
    		public void setAge (int age){
    			this.age = age;	
    		}
    
    
    
    
    	}
    
    ***                                              ***                                  ***
    
    public class Track {
    	private String name;	
    	private String nation;	
    	private int laps;
    	
    		
    		public Track(){
    			
    		} 		
    
    
    		public Track(String name, String nation, int laps){
    			setName(name);
    			setNation(nation);		
    			setLaps(laps);
    		} 
    
    
    
    
    		public String getName(){
    			return name;	
    		}
    		
    		public void setName(String name){
    			this.name = name;	
    		}
    	  	
    		public String getNation(){
    			return nation;	
    		}
    		
    		public void setNation(String nation){
    			this.nation = nation;	
    		}
    
    
    		public int getLaps(){
    			return laps;	
    		}
    		
    		public void setLaps(int laps){
    			this.laps = laps;	
    		}
    
    
    
    
    		public void announceTrack(){
    		System.out.println("Welcome to the " + name + " grandprix of " + nation + "!"); 	
    
    
                    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da luca125 Visualizza il messaggio
    Guarda mi dispiace tanto per la confusione, purtroppo il problema di imparare le cose da soli � che si impara con lacune... e mi dispiace che ti sto assillando da un po' ormai
    Quanto a questo non preoccuparti, il forum è fatto apposta per chiedere chiarimenti, ci sono discussioni che vanno avanti per molto tempo ed è giusto così, al massimo la gente ci mette un po' di tempo a rispondere se ha da fare

    Curiosità mia riguardo al codice, che editor di testo o IDE usi per programmare?
    Io con Notepad++ mi trovo benissimo, è facilissimo tenere il codice ben indentato e puoi personalizzare il modo di mostrare le parole chiave in modo da non aver bisogno di separare con tanti spazi e righe vuote i vari metodi.
    Certo non è fatto apposta per compilare ed eseguire i programmi java, ma io mi trovo bene anche da linea di comando.

    Quote Originariamente inviata da luca125 Visualizza il messaggio
    Comunque il codice l'ho cambiato di nuovo alla fine, i due array erano confusionari quindi ho tolto l'array drivers e ho lasciato solamente cars, dentro il quale ho istanziato i piloti. ora il programma funziona, a parte il fatto che non stampa i nomi dei piloti, ma stampa:

    Driver@6d06d69c
    Driver@7852e922
    Driver@4e25154f
    Driver@70dea4e
    Driver@5c647e05
    Driver@33909752
    The winner is Driver@7852e922

    L'errore penso sia piccolo, ma io ormai ci sto impazzendo dietro a questo programma
    Ok bene la sistemazione di quella parte, ora ogni monoposto ha il proprio Driver come è giusto che sia.

    Per quanto riguarda l'errore in fase di stampa hai ragione, è davvero piccolo: il metodo che usi per stampare a video (System.out.println), ma anche gli altri metodi per la stampa in generale, "scrivono" un oggetto richiamando il suo metodo toString(), che è definito in Object e viene pertanto ereditato da ogni classe che crei.

    Il metodo in generale restituisce una stringa contenente nome della classe e codice hash, per cui quando si stampa un Oggetto (per i tipi primitivi e alcune classi come String questa parte non serve, il println è definito in modo specifico per ognuno di essi) devi fare l'override del metodo toString() per poter impostare la stringa che verrà stampata.
    Nel tuo caso in Driver puoi fare in modo che toString() restituisca il nome e il cognome del pilota.

    Riguardo al codice in generale, non ho guardato ogni specifico particolare, ma ti consiglio di fare anche quelle modifiche consigliate nei messaggi precedenti, in particolare di non costruire tanti oggetti Random, ora non fa una grande differenza ma è bene imparare ad usare solo quello di cui si ha bisogno.
    Poi vedo che in molti costruttori usi ancora i metodi set, in generale come dicevo i metodi set e get vengono usati solo all'esterno delle classi...
    Ultima modifica di Ansharja; 29-06-2016 a 12:05

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    Quanto a questo non preoccuparti, il forum è fatto apposta per chiedere chiarimenti, ci sono discussioni che vanno avanti per molto tempo ed è giusto così, al massimo la gente ci mette un po' di tempo a rispondere se ha da fare

    Curiosità mia riguardo al codice, che editor di testo o IDE usi per programmare?
    Io con Notepad++ mi trovo benissimo, è facilissimo tenere il codice ben indentato e puoi personalizzare il modo di mostrare le parole chiave in modo da non aver bisogno di separare con tanti spazi e righe vuote i vari metodi.
    Certo non è fatto apposta per compilare ed eseguire i programmi java, ma io mi trovo bene anche da linea di comando.



    Ok bene la sistemazione di quella parte, ora ogni monoposto ha il proprio Driver come è giusto che sia.

    Per quanto riguarda l'errore in fase di stampa hai ragione, è davvero piccolo: il metodo che usi per stampare a video (System.out.println), ma anche gli altri metodi per la stampa in generale, "scrivono" un oggetto richiamando il suo metodo toString(), che è definito in Object e viene pertanto ereditato da ogni classe che crei.

    Il metodo in generale restituisce una stringa contenente nome della classe e codice hash, per cui quando si stampa un Oggetto (per i tipi primitivi e alcune classi come String questa parte non serve, il println è definito in modo specifico per ognuno di essi) devi fare l'override del metodo toString() per poter impostare la stringa che verrà stampata.
    Nel tuo caso in Driver puoi fare in modo che toString() restituisca il nome e il cognome del pilota.

    Riguardo al codice in generale, non ho guardato ogni specifico particolare, ma ti consiglio di fare anche quelle modifiche consigliate nei messaggi precedenti, in particolare di non costruire tanti oggetti Random, ora non fa una grande differenza ma è bene imparare ad usare solo quello di cui si ha bisogno.
    Poi vedo che in molti costruttori usi ancora i metodi set, in generale come dicevo i metodi set e get vengono usati solo all'esterno delle classi...
    Alla fine ho risolto così il problema della stampa:
    System.out.println(cars[i].getDriver().getName() + cars[i].getDriver().getSurname());

    Cosa ne pensi?
    Appena avrò un po' di tempo poi sistemerò le cose dei costruttori che dicevi, per il momento devo scappare
    Grazie davvero tanto per il tuo tempo

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da luca125 Visualizza il messaggio
    Alla fine ho risolto così il problema della stampa:
    System.out.println(cars[i].getDriver().getName() + cars[i].getDriver().getSurname());

    Cosa ne pensi?
    E' sicuramente un modo di risolvere la cosa, ma ridefinire toString è sicuramente il metodo migliore: in questo modo la logica viene inserita all'interno della classe Driver, che è il posto migliore per gestirla, ed è invece nascosta a tutte le classi che desiderano stampare a video un oggetto Driver.

    Infatti se devi modificare le informazioni che vuoi ricevere (ad esempio potresti voler aggiungere i punti nel mondiale, il numero di macchina del pilota o anche solo cambiare il carattere di separazione tra nome e cognome o altro...) ti basta modificare un unico metodo nella classe Driver, senza dover cambiare tutte le istruzioni relative alla stampa nelle altre classi.
    Poi migliori la leggibilità del codice e lo rendi più snello, ti basta scrivere System.out.println (cars[i].getDriver()) , senza doverti preoccupare di andare a recuperare a mano le informazioni.

    Infine il metodo è toString() è utile anche in altri contesti, per ora potrebbe non servire a tutti i costi ma non fa male abituarsi a ridefinirlo

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 © 2024 vBulletin Solutions, Inc. All rights reserved.