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 + "!"); 	


                }
















}