2016-04-10 2 views
0

Dans ma classe de pilotes CarRaceSim dans la course de fonction, j'appelle mes deux objets car1 et car2. Puis j'appelle la fonction d'accélération et de freinage de ma classe CarRace qui est censée ajouter et soustraire un nombre aléatoire de la variable de vitesse qui est passée en accélération et en freinage. La variable de vitesse est un entier auquel l'utilisateur attribue une valeur. Cependant, quand j'appelle la fonction et l'imprime, elle affiche seulement ce que l'utilisateur a mis. Le programme en général est supposé simuler 5 courses dans lesquelles chaque tour (boucle 5 fois) la voiture accélère et freine, c'est pourquoi j'ai appelé accélérer et frein pour les deux voitures. Comment puis-je accélérer et freiner pour fonctionner correctement?Comment obtenir mes 2 objets et appeler une fonction en lui passant une variable?

package carrace; 
import java.util.Random; 
/** 
* 
* @author Daniel 
*/ 
public class CarRace { 

    int year, speed; 
    String model, make; 


    // default constructor 
    public CarRace(){ 
     year = 2000; 
     model = ""; 
     make = ""; 
     speed = 0; 
    } 

    // non-default constuctor 
    public CarRace(int aYear, String aModel, String aMake, int aSpeed){ 
     this.year = aYear; 
     this.model = aModel; 
     this.make = aMake; 
     this.speed = aSpeed; 
    } 

    public int getYear() { 
     return year; 
    } 

    public void setYear(int year) { 
     this.year = year; 
    } 

    public int getSpeed() { 
     return speed; 
    } 

    public void setSpeed(int speed) { 
     this.speed = speed; 
    } 

    public String getModel() { 
     return model; 
    } 

    public void setModel(String model) { 
     this.model = model; 
    } 

    public String getMake() { 
     return make; 
    } 

    public void setMake(String make) { 
     this.make = make; 
    } 

    public void accelerate(int speed){ 
     Random randomNum = new Random(); 
     int ranNum; 

     ranNum = randomNum.nextInt(26) + 5; 
     speed += ranNum; 
    } 

    public void brake(int speed){ 
     Random randomNum = new Random(); 
     int ranNum; 

     ranNum = randomNum.nextInt(26) + 5; 
     speed -= ranNum; 
    } 

    public String toString(){ 
     return "The year of the car is " + year + ", the model of the car is " + model + ", the make of the car is " + make + ", and the initial speed is " + speed + ".\n"; 
    } 
} 

package carrace; 
import java.util.Scanner; 
/** 
* 
* @author Daniel 
*/ 
public class CarRaceSim { 

    public static CarRace car1; 
    public static CarRace car2; 

    public static void main(String[] args) { 

     System.out.println("Welcome to the car simulation program!"); 
     System.out.println("You will now begin to create your two cars to race, good luck!\n\n"); 

     createCar(1); 
     createCar(2); 

     race(car1, car2); 
    } 

    public static void createCar(int carCreation){ 
     Scanner keyboard = new Scanner(System.in); 
     int year = 0; 
     String model; 
     String make; 
     int speed = 0; 

     do{ 
      if (carCreation == 1) 
       System.out.println("Create your first car!"); 
      else 
       System.out.println("Create your second car!"); 

      System.out.println("What year is your car?"); 
      year = keyboard.nextInt(); 

      System.out.println("What model is your car?"); 
      model = keyboard.next(); 

      System.out.println("What make is your car?"); 
      make = keyboard.next(); 

      System.out.println("What speed is your car initially starting at? (0-60)"); 
      speed= keyboard.nextInt(); 

      if(speed < 0){ 
       System.out.println("You can not begin at a negative speed, please choose between 0-60."); 
      } 
      else if(speed > 60){ 
       System.out.println("You can not start above 60, please choose between 0-60."); 
      }   

     }while(speed <= 0 && speed >= 60); 

     if(carCreation == 1){ 
      car1 = new CarRace(year, model, make, speed); 
      System.out.println(car1); 
     } 
     else{ 
      car2 = new CarRace(year, model, make, speed); 
      System.out.println(car2); 
     }  

    } 

    public static void race(CarRace carUno, CarRace carDue){ 

     for(int i = 1; i <= 5; i++){ 

      System.out.println("Lap " + i); 

      System.out.println("Car 1's stats:"); 
      car1.accelerate(car1.getSpeed()); 
      System.out.println(car1.getSpeed()); 
      car1.brake(car1.getSpeed()); 
      System.out.println(car1.getSpeed()); 

      System.out.println("Car 2's stats:"); 
      car2.accelerate(car2.getSpeed()); 
      System.out.println(car2.getSpeed()); 
      car2.brake(car2.getSpeed()); 
      System.out.println(car2.getSpeed() + "\n"); 
     } 
    } 
} 

Répondre

2

Dans votre fonction accelerate() vous attribuez une valeur à la variable locale speed. Ce que vous voulez assigner à est la variable de classe this.speed, tout comme vous le faites dans vos autres méthodes (comme setMake() par exemple).

En d'autres termes changer

speed += ranNum; 

à

this.speed += ranNum; 

Faites la même chose pour votre fonction de freinage.

+0

Je ne peux pas croire que j'ai raté, je vous remercie, je l'apprécie. – Danny

2

La valeur que vous modifiez dans les méthodes accelerate() et brake() est mise à jour sur la variable que vous transmettez pas sur la variable de vitesse de classe. Pour attribuer une nouvelle valeur à vitesse variable de classe ajouter la ligne suivante dans votre accelerate() et brake() méthodes:

//for accelerate() method 
//add below line after speed += ranNum; 
this.speed = speed; 

//for brake() method 
//add below line after speed -= ranNum; 
this.speed = speed; 

Voir aussi Instance Variable Hiding Pour de plus amples explications sur la raison pour laquelle vous devez faire.

+0

Merci, cela a aidé! – Danny

1

Vous devriez changer votre méthode d'accélérer la manière suivante:

public void accelerate(int speed){ 
     Random randomNum = new Random(); 
     int ranNum; 

     ranNum = randomNum.nextInt(26) + 5; 
     this.speed += ranNum; 
    } 

De même u doivent changer de méthode de frein