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");
		}   
		
		










}