首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不可达的If语句

不可达的If语句
EN

Stack Overflow用户
提问于 2016-12-13 20:16:15
回答 5查看 317关注 0票数 0

在发帖之前,我试着寻找一个类似于此的答案,所以请放心吧。我使用Java只使用了大约一个半星期。在下面的代码块中,我得到了一个错误,涉及第20行上一个不可访问的if语句,以及一个关于30行缺少的返回语句的错误。我相信我可以将它设置为返回(0);对于最后一个错误,但是对于第一个问题,我似乎无法弄清楚。

代码语言:javascript
复制
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 
  }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-13 20:30:41

“问题”是在if语句之前返回。

代码语言:javascript
复制
return (0);
if (whatever)
   doSomething;

“返回(0)”做了两件事:它立即结束对当前函数的执行,并“返回”执行调用您的函数;它还将"0“传递回函数的调用。因此,在到达if语句之前,您总是要结束函数的执行。

我认为您希望设置您的“返回值”,然后继续执行。这是比较普遍的。创建一个名为"retVal“或什么的新变量,并将其设置为零。然后,当您的函数完成时,执行:

代码语言:javascript
复制
return(retVal);

但你似乎也没有非常聪明地使用你的返回值。你似乎只返回"0“。您的函数真正的“输出”是日志记录。似乎您实际上并没有返回有用的数据,所以让您的函数“无效”:

代码语言:javascript
复制
public void chargeBattery(){

因为函数并不期望返回值,所以根本不需要返回语句。当您读取函数的末尾时,它将简单地将代码的执行返回到调用函数的位置。如果您想要“尽早”结束执行,那么只需使用:

代码语言:javascript
复制
return;
票数 2
EN

Stack Overflow用户

发布于 2016-12-13 20:20:01

是因为您在if语句之前返回了一个值吗?代码将设置batteryLevel,然后返回(0),因此永远不会到达if-语句。

票数 2
EN

Stack Overflow用户

发布于 2016-12-13 21:41:12

这是关于Java方法的基础知识。在您的代码中:

代码语言:javascript
复制
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语句:

例如,

代码语言:javascript
复制
public void myMethod(){
    if(whatever)
        return;
    //Code below may still run if above condition fails
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41129824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档