2017-06-05 17 views
-1

私は、コンストラクターとメソッドを作成するクラスを作成しました。この方法での加速:クラスのメソッドは、与えられた型には適用できません

public class Car 
{ 
private double speed; 
private String make; 
private int year; 

public Car(int year, String make, double speed) { 
this.year = year; 
this.make = make; 
this.speed = speed; 
} 

public String getMake(){ 
    return make; 
} 
public double getSpeed(){ 
    return speed; 
} 
public int getYear(){ 
    return year; 
} 


    public void accelerate (double speed) 
{ 
     speed = speed + 1.00; 
} 


} 

私はここに持っています唯一の問題は、私はそれを試してみて、実行するために私のドライバクラスに行くとき、これは私が

public class CarTester 
{ 
public static void main (String[] args){ 

Car p1 = new Car(2010, "toyota", 4.50); 
Car.accelerate(); 
Car.accelerate(); 

} 
} 

」エラーが受けてる誤りがあるということですクラス車は与えられたタイプには適用できません "

なぜそうですか?それは "required:double"と書かれていますが、 "speed"変数はdoubleですか?

答えて

2

方法

public void accelerate(double speed){ 
speed=speed+1.0; 
} 

「速度」パラメータを渡す必要はありません。

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

また、オブジェクト(この場合はp1)でこのメソッドを呼び出す必要があります。

p1.accelerate(); 

ない

Car.accelerate(); 

は、この問題を解決するためにあなたを助けることを願っています:)

2

方法は、パラメータ

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

を必要とすべきではないとあなたはCarオブジェクトの作成p1

public static void main (String[] args){ 
    Car p1 = new Car(2010, "toyota", 4.50); 
    p1.accelerate();  
    p1.accelerate(); 
    System.out.println(p1.getSpeed()); 
} 
0

インスタンスから呼び出さなければなりません。

Car p1 = new Car(2010, "toyota", 4.50); 

1)しかし、あなたaccelerate (double speed)はインスタンスメソッドですが、静的な方法でアクセラレーションを呼び出す:

Car.accelerate(); 
Car.accelerate(); 

2)accelerate()はパラメータを指定しますが、メソッドには指定しません。

あなたはむしろ書くべき:

car.accelerate(5); 
car.accelerate(5); 

3)この:ローカル変数は、フィールド名と同じ名前を持つよう

public void accelerate (double speed){ 
     speed = speed + 1.00; 
    } 

が動作しません。
フィールド名と同じ名前のローカル変数は、フィールド変数をシャドウします。あなたが方法でそれを使用する場合thisでフィールド名を接頭辞パラメータ名以上の名前を変更する必要があり、それを避けるために

public void accelerate (double speed){ 
     this.speed = this.speed + speed; 
    } 
1

accelerateは静的メソッドではないので、Car.accelerate()

呼び出すことはできません

作成したオブジェクトで呼び出す必要があります。つまり、p1です。

また、この方法ではspeedパラメータが渡されますが、これは間違っています。

速度はすでにフィールド

であるとして、あなたがしたいのかによってspecifiyできるように、また、あなたが

public void accelerate (double speedUpBy) 
{ 
    speed = speed + speedUpBy; 
} 

としてそれを残すことができる

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

ように私はそれを書き換えます加速することによって

0
public static void main (String[] args) 

{かごC =新しい車(2010年、 "トヨタ"、4.50); c.accelerate(); System.out.println(c.getSpeed()); }

コードは、Carクラスの代わりに任意のオブジェクトcを介して呼び出される、このようにする必要があります。

関連する問題