2016-05-03 2 views
-2

У меня есть следующий код:<Variable> не может быть решена с переменной

public interface CarInterface { 

    int getCapacity(); 
    String getCarRegistration(); 
    void setCarRegistration(String registration); 
    int getFuelAmmount(); 
    boolean isFull(); 
    boolean isRented(); 
    int addLitres(int litres); 
    int drive(); 
} 

public abstract class Car implements CarInterface{ 

    protected boolean full; 
    private boolean rented; 
    private String registration; 
    protected int fuel; 


    public String getCarRegistration() { 
     return registration; 
    } 

    public void setCarRegistration(String registration){ 
     this.registration = registration; 
    } 


    public int getFuelAmmount() { 
     return fuel; 
    } 

    public boolean isFull() { 
     return full; 
    } 

    public boolean isRented() { 
     return rented; 
    } 
} 

public class LargeCar extends Car{ 

    public int drive() { 
     return getFuelAmmount(); 
    } 

    public int addLitres(int litres) { 
     fuel = fuel + litres; 
     if (fuel > 65) { 
      fuel = 65; 
     } 
     if (isRented()) { 
      int x = 5; 
     } 

     return x; 


    } 

    public int getCapacity() { 
     return 65; 
    } 
} 

Eclipse, говорит мне, что возвращаемый тип несовместим с декларацией интерфейса (Возвращение тип несовместим с CarInterface.addLitres (int)). Я понятия не имею, почему это так. Я сказал, что возвращу int в интерфейсе, и это то, что я делаю ...

У этого также есть проблема с 'x', который, по его словам, не может быть разрешен переменной. Как ни странно, когда я принимаю «int x» из инструкции if, сообщение об ошибке исчезает.

+0

Прохладное форматирование. – ale64bit

ответ

2

Вы должны объявить x за пределами if.

int x = 0; 
if (isRented()) { 
    x = 5; 
} 
+0

Как получилось? Это никогда не было проблемой до ... –

+0

@MartinRand Если операторы имеют свой собственный диапазон переменных. –

+0

Это действительно так. Возвращаемая переменная должна быть доступна, даже если вы не вводите тест if. –

0

Это здесь:

public int addLitres(int litres) { 
     fuel = fuel + litres; 
     if (fuel > 65) { 
      fuel = 65; 
     } 
     if (isRented()) { 
      int x = 5; 
     } 
     return x; 
    } 

недействителен, так как переменная х в ограниченном объеме только потому, что объявлена ​​внутри, если сегмент ...

сделать вместо: объявить ИНТ х как переменная в методе и установить ее соответствующее значение, если топливо или что-то еще, что вам нужно для chec

пример:

public int addLitres(int litres) { 
     int x = 0; 
     fuel = fuel + litres; 
     if (fuel > 65) { 
      fuel = 65; 
     } 
     if (isRented()) { 
      x = 5; 
     } 
     return x; 
    } 
+0

Есть ли шанс, что вы можете решить первую проблему? :) –

0

Ну, вы не можете вернуть x, потому что он не может быть возвращен, поскольку он объявлен внутри блока кода if (isRented()) {int x = 5}. Чтобы вернуть x, вы должны определить его за пределами области if (isRented()) {int x = 5}, например

int x = 0; 

if(isRented()) 
{ 
    x = 5; 
}