2017-06-05 2 views
-1

Ich machte eine Klasse namens, die einen Konstruktor und eine Methode erstellt.Methode in Klasse kann nicht auf gegebene Art angewendet werden

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


} 

das einzige Problem, das ich hier habe, ist, dass, wenn ich zu meinem Fahrer Klasse gehen, um zu versuchen und führen Sie es, dies ist der Fehler Ich erhalte

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

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

} 
} 

„Fehler: Verfahren beschleunigen in Klasse Auto kann nicht auf bestimmte Typen angewendet werden "

Warum ist das so? weil es "benötigt: doppelt" sagt, aber die "Geschwindigkeit" Variable ist ein Doppel?

Antwort

2

Methode

Sollte nicht erwartet werden, dass ein Parameter "speed" übergeben wird. Es sollte einfach nur so aussehen:

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

Auch sollten Sie diese Methode auf das Objekt (in diesem Fall p1) aufrufen.

p1.accelerate(); 

Nicht

Car.accelerate(); 

Hoffe, es wird Ihnen helfen, dieses Problem zu lösen :)

2

Das Verfahren sollte keine Parameter erfordern

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

und muss von der Instanz 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

Sie erstellen ein Car-Objekt aufgerufen werden:

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

1) Aber Sie Aufruf beschleunigen auf statische Weise, während accelerate (double speed) eine Instanzmethode ist:

2) accelerate() gibt einen Parameter an, den Sie jedoch nicht in der Methode angeben.

Sie sollen lieber schreiben:

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

3) Diese:

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

wird nicht funktionieren, wie die lokalen Variablen die gleichen Namen wie der Feldnamen haben.
Eine lokale Variable mit demselben Namen wie ein Feldname schattiert die Feldvariable.
es zu vermeiden, sollten Sie die Parameternamen umbenennen oder besser die Feldnamen mit this prefixing, wenn Sie es in der Methode:

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

accelerate ist kein statisches Verfahren, so kann Car.accelerate() nicht

genannt werden

Sie müssen es auf dem Objekt aufrufen, das Sie erstellt haben, zB p1.

Auch - diese Methode erwartet die speed Parameter übergeben werden, aber das sieht falsch aus.

Ich würde es umschreiben als

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

als Geschwindigkeit ist bereits ein Feld

Alternativ können Sie es als

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

verlassen konnte, so dass Sie, wie viel specifiy können Sie wollen beschleunigen durch

0
public static void main (String[] args) 

{Car c = new Car (2010, "Toyota", 4,50); c.accelerate(); System.out.println (c.getSpeed ​​()); }

Der Code sollte so sein, durch ein beliebiges Objekt c statt der Klasse Car aufgerufen.

Verwandte Themen