2015-11-20 61 views
-2

我在介紹java類,並且遇到了分配的汽車類問題。下面是說明: 編寫類名爲汽車具有以下字段(屬性):加速和制動的汽車類

yearModel

make(一個字符串,它擁有汽車的品牌(其持有的汽車的年模型一個int) )

speed(持有汽車的當前速度)

Car類應該有下面的構造等方法一個int:

Constructor - 接受汽車的yearmodelmake作爲參數。

Accessors(吸氣)爲對象的yearModelmakespeed領域

方法: accelerate - 每次調用的時候,它應該增加5到speedbrake - 每次被調用時,它應該減去5到speed

Driver班,DrivingSimulation類,它具有以下功能:

提示用戶輸入汽車的yearModel,makespeed值。 創建Car對象 調用accelerate方法5倍 - 每次通話後,使用accessor方法來顯示轎廂 呼叫的當前speedbrake方法5倍 - 每次通話後,使用accessor方法來顯示當前speed汽車

我得到了大部分完成,但沒有收到,我把速度輸入,而不是從默認的開始,0。這裏是我的車類

package drivingsimulation; 

/** 
* 
* @author Carlos 
*/ 

public class Car { 
private int yearModel; 
private String make; 
private int speed; 

public Car(int yearModel, String make) { 
    this.yearModel = yearModel; 
    this.make = make; 
} 

public int getYearModel() { 
    return yearModel; 
} 

public String getMake() { 
    return make; 
} 

public int getSpeed() { 

    System.out.println("You are going " + speed + " mph"); 
    return speed; 

} 

public void accelerate() { 

    speed += 5; 

} 


public void brake() { 

    speed-=5; 

} 





} 

這裏是我的駕駛呃類:

/* 

package drivingsimulation; 
import java.util.Scanner; 
/** 
* 
* @author Carlos 
*/ 
public class DrivingSimulation { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    int yearModel=0; 
    int speed=0; 
    String make=null; 


    Scanner keyboard = new Scanner (System.in); 

    Car myCar = new Car(yearModel, make); 

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

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

    System.out.println("How fast is your car going? "); 
    speed = keyboard.nextInt(); 



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


     myCar.accelerate(); 

    } 
} 

} 

回答

1

那麼你有速度類成員的訪問器,但是當你從你的驅動類中的用戶輸入中獲得值時,你沒有setter。

在你的車類中的方法是這樣的:

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

將爲汽車實例的設定值是用戶輸入中給出。

可以爲速度這樣用戶輸入後,把它..

myCar.setSpeed(speed);

+0

礦非常愚蠢的錯誤,謝謝! – javaGuy123456

0

你怎麼知道它沒有得到速度信息 - 你永遠不會打電話給getSpeed()

建議:

  • 呼叫getSpeed(),如果你想看到的速度是什麼。
  • 獲取所有println的Car類。他們應該只在你目前的主要方法。
  • 爲該課程提供速度設置方法 - public void setSpeed(int speed),並調用該方法。

例如,getSpeed()應該只是

public int getSpeed() { 
    return speed; 
} 

就是這樣,僅此而已。但是你把它想:

System.out.println("Car's speed: " + myCar.getSpeed()); 

您還沒有public void setSpeed(int speed)方法,你需要一個,並獲得來自用戶的信息後,應該調用它。

+0

非常感謝你,我完全忘記了二傳手 – javaGuy123456

0

添加setSpeed()二傳手在您的汽車類並調用它在你的DrivingSimulation類像下面(也動print語句DrivingSimulation使您的汽車保持模塊化)。

public class Car { 

    private int yearModel; 
    private String make; 
    private int speed; 

    public Car(int yearModel, String make) { 
     this.yearModel = yearModel; 
     this.make = make; 
    } 

    public int getYearModel() { 
     return yearModel; 
    } 

    public String getMake() { 
     return make; 
    } 

    public int getSpeed() { 
     return speed; 
    } 

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

    public void accelerate() { 
     speed += 5; 
    } 

    public void brake() { 
     speed -= 5; 
    } 
} 

和...

import java.util.Scanner; 

public class DrivingSimulation { 

    public static void main(String[] args) { 

     int yearModel = 0; 
     String make = null; 
     int speed; 

     Scanner keyboard = new Scanner(System.in); 

     Car car = new Car(yearModel, make); 

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

     System.out.println("What is the make of the car?"); 
     keyboard.nextLine(); // fixes bug - receives the Enter key without skipping make = keyboard.nextLine() 
     make = keyboard.nextLine(); 

     System.out.println("What speed is the initial speed of the car?"); 
     speed = keyboard.nextInt(); 
     car.setSpeed(speed); 

     for (int i = 0; i < 5; i ++) { 
      car.accelerate(); 

      System.out.println("Your " + yearModel + " " + make + 
      " is traveling at " + car.getSpeed() + " MPH."); 
     } 
    } 
} 
+0

如何打印出年份模型並使用其他類,類似於getSpeed? – javaGuy123456

+0

由於您需要創建一個Car對象,然後讓它執行一個動作,所以您可以將主要方法中的所有內容都複製到另一個類中,並且它可以工作。如果你試圖在getSpeed(「Your」+ getYearModel()+「」+ getMake()...)等內部修改原始打印語句,那麼yearModel和make將顯示爲0,因爲該對象已聲明在你的DrivingSimulation類中。我確信有一種方法可以強制Car類以其他方式打印所有內容,但我無法想象如何,也可能不會成爲可接受的面向對象的做事方式。 –