2016-12-13 4 views
-1

Я попытался найти ответ, подобный этому, прежде чем публиковать сообщения, поэтому, пожалуйста, поймите меня легко. Я работаю с Java уже около полутора недель. В следующем блоке кода я получаю сообщение об ошибке в отношении недостижимого оператора if в строке 20 и ошибки в отношении отсутствующего оператора возврата на 30. Я считаю, что могу просто установить его для возврата (0); для последней ошибки, но для первой проблемы я не могу понять это.Unreachable If Statement

class Droid { 

    int batteryLevel = 100;    //created instance variable, batteryLevel 
    int hours;        //created instance var, hours. val not set yet 

    public void activate() {    //created activate method, string type return 

    System.out.println("Activated. Hello human. How can I help you?"); 
    batteryLevel = batteryLevel - 5; //Set batteryLevel to decrease by 5 
    System.out.println("Battery level is " + batteryLevel + " percent."); 
} 

public int chargeBattery(){  //creat int method chargeBattery 


    System.out.println("Droid charging..."); 
    batteryLevel = batteryLevel + hours; //setting up recharge for droid 
    return(0);     //return 0 or return nothing? 

    if (batteryLevel > 100) { //If battery level is greater than 100 
    batteryLevel = 100;     //battery level is 100 
    System.out.println("Your battery level is at " + batteryLevel + " percent"); 
    return(0);     //return 0 or return nothing? 
    }  

    else {        //else, print out battery level 
    System.out.println("Your battery level is at " + batteryLevel + " percent"); 
    } 
} 





    public static void main(String [] args) { // Main method 
    } 
} 
+0

Чтобы уточнить, ошибка возникает при объявлении аккумулятораLevel> 100. Спасибо. –

+2

Вы возвращаетесь (0); перед выражением if в 'chargeBattery()', поэтому вы возвращаетесь из функции до того, как вы нажмете на оператор if – JackVanier

ответ

-1

System.out.println («Droid charge ...»); батареяLevel = аккумуляторLevel + часы; // настройка перезарядки для дроида return (0); // возвращаем 0 или ничего не возвращаем?

Условный заявления и весь код в недостижим из-за возвращения (0) ниже batteryLevel = batteryLevel + часов, пожалуйста, удалить возврат (0), чтобы зафиксировать недостижимый ошибку

1

Это потому, что вы возвращаете значение перед утверждение if? Код установит batteryLevel, а затем вернется (0), поэтому никогда не дойдет до оператора if.

0

Как уже было указано, вы возвращаетесь 0 перед утверждением if, но Вам нужно что-нибудь вернуть? потому что вы можете просто изменить

public int chargeBattery() -> public void chargeBattery() 

тогда вы можете удалить статуты возврата.

1

«Проблема» в том, что вы возвращаетесь перед оператором if.

return (0); 
if (whatever) 
    doSomething; 

«Возвращение (0)» делает 2 вещи: он сразу же заканчивается excution вашей текущей функции и «возвращает» в выполнении функции ваша была вызвана; и он также передает «0» обратно на вызов вашей функции. Таким образом, вы всегда прекращаете выполнение своей функции, прежде чем когда-либо достигнете оператора if.

Я думаю, что вы хотите установить свое «возвращаемое значение», а затем продолжить выполнение. Это относительно часто. Создайте новую переменную, называемую «retVal» или что-то, и установите ее вместо нуля. Затем, когда выполняется ваша функция, выполните:

return(retVal); 

Но вы также, похоже, не очень хорошо используете свои возвращаемые значения. Кажется, вы только возвращаете «0». И реальным «выходом» вашей функции является ведение журнала. Похоже, что вы на самом деле не возвращаетесь полезные данные, поэтому сделать вашу функцию «пустота»:

public void chargeBattery(){ 

Поскольку функция не ожидает возврата значения, то вы не делает заявление возврата «нужно» на все , Когда вы прочитаете конец функции, он просто вернет выполнение кода обратно в место, из которого была вызвана функция. Если вы хотите завершить выполнение «раньше», просто используйте:

return; 
0

Ну, это об основах методов Java. В коде:

public int chargeBattery(){   
    System.out.println("Droid charging..."); 
    batteryLevel = batteryLevel + hours; 
    return(0);   //method will exit from this line onwards 
    //Everything from here onwards will be unreachable 
} 

Будь то вы возвращаете значение с return 0 или просто return, то это вызовет метод, чтобы выйти из себя (и по-прежнему от того, где она вызывается).

Таким образом, все, что ниже вашего возвращения заявления будет никогда не будет достигнута и Java является 100% уверен, что он никогда не будет достигнута, так как оператор возврата будет всегда работает первый.

Однако, если ваш return заявление заключено внутри if-condition, это другое дело, потому что все еще существует возможность того, что условие может не значит, пропуская что return заявления:

Например:

public void myMethod(){ 
    if(whatever) 
     return; 
    //Code below may still run if above condition fails 
}