首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这个代码序列中出现了不可访问的代码错误,而不是后者?

为什么在这个代码序列中出现了不可访问的代码错误,而不是后者?
EN

Stack Overflow用户
提问于 2022-04-28 08:44:52
回答 1查看 36关注 0票数 -2
代码语言:javascript
复制
public String motorNoise() {
    String[] ignition={"vroom","pop","bang"};
    engineNoise=(int)(Math.random()*3);
    startEngine=ignition[engineNoise];
    if (engineNoise==2)
        System.out.println("This car needs a service");
    return startEngine;
    
        
    }

但此序列会导致无法到达的代码错误。为什么If语句的位置导致方法失败?

代码语言:javascript
复制
public String motorNoise() {
    String[] ignition={"vroom","pop","bang"};
    engineNoise=(int)(Math.random()*3);
    startEngine=ignition[engineNoise];
    
    return startEngine;
    
    if (engineNoise==2)
        System.out.println("This car needs a service");
        
    }
EN

回答 1

Stack Overflow用户

发布于 2022-04-28 08:55:37

因为在第一个示例中,如果通过该方法获得所有可能的路径,则将执行所有语句。

但是,在第二个示例中,永远无法执行if语句:

代码语言:javascript
复制
public String motorNoise() {
    String[] ignition={"vroom","pop","bang"};
    engineNoise=(int)(Math.random()*3);
    startEngine=ignition[engineNoise];
    
    return startEngine; // <-- EXECUTED UNCONDITIONALLY, FUNCTION TERMINATES
    
    if (engineNoise==2)
        System.out.println("This car needs a service");        
}

return startEngine总是无条件地执行,并立即终止函数的执行。if (engineNoise == 2)是无法执行的。

注意:正确格式化和缩进代码以及使用大括号总是有好处的。你的第一个例子

代码语言:javascript
复制
public String motorNoise() {
    String[] ignition={"vroom","pop","bang"};
    engineNoise=(int)(Math.random()*3);
    startEngine=ignition[engineNoise];
    if (engineNoise==2)
        System.out.println("This car needs a service");
    return startEngine;
}

实际上是:

代码语言:javascript
复制
public String motorNoise() {
    String[] ignition={"vroom","pop","bang"};
    engineNoise=(int)(Math.random()*3);
    startEngine=ignition[engineNoise];
    if (engineNoise==2) {
        System.out.println("This car needs a service");
    }
    return startEngine;
}

因此,影响执行的不仅是行的顺序,还包括代码块的嵌套。if-语句正文中的任何内容都只能有条件地执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72040625

复制
相关文章

相似问题

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