2016-04-10 10 views
0

In meiner Fahrerklasse CarRaceSim im Funktionsrennen rufe ich beide meiner Objekte car1 und car2 an. Dann rufe ich die Beschleunigungs- und Bremsfunktion aus meiner CarRace-Klasse auf, die eine Zufallszahl von der Geschwindigkeitsvariable addieren und subtrahieren soll, die beim Beschleunigen und Bremsen übergeben wird. Die Geschwindigkeitsvariable ist ein Int, dem der Benutzer einen Wert zuweist. Aber wenn ich die Funktion anrufe und sie ausdrucke, zeigt sie nur das an, was der Benutzer eingegeben hat. Das Programm soll 5 Rennen simulieren, in denen jede Runde (Schleife 5 mal) das Auto beschleunigt und bremst und Bremse für beide Autos. Wie kann ich beschleunigen und bremsen, um richtig zu funktionieren?Wie bekomme ich meine 2 Objekte und rufe eine Funktion auf, die eine Variable übergibt?

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

Antwort

2

In Ihrer Funktion accelerate() Sie einen Wert der lokalen Variablen speed zuweisen. Was Sie zuweisen möchten, ist die Klassenvariable this.speed, genau wie in Ihren anderen Methoden (wie zB setMake()).

Mit anderen Worten ändern

speed += ranNum; 

zu

this.speed += ranNum; 

Machen Sie dasselbe für die Bremsfunktion.

+0

Ich kann nicht glauben, dass ich das verpasst, danke ich es zu schätzen wissen. – Danny

2

Der Wert, den Sie in den Methoden accelerate() und brake() ändern, wird für die Variable aktualisiert, die Sie nicht an der Geschwindigkeitsvariablen der Klasse übergeben. Um neuen Wert zuweisen Variable der Klasse hinzufügen folgende Zeile in Ihren accelerate() und brake() Methoden zu beschleunigen:

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

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

Auch Instance Variable Hiding für weitere Erläuterungen siehe, warum Sie dies tun müssen.

+0

Danke, das hat geholfen! – Danny

1

sollten Sie Ihre beschleunigen ändern Methode, wie folgend:

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

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

Ähnlich u haben Bremsmethode ändern

Verwandte Themen