【问题标题】:Unreachable code when closing scanner in java?在java中关闭扫描仪时无法访问代码?
【发布时间】:2016-10-05 21:00:15
【问题描述】:

当我尝试关闭 myScanner 时,我在 myScanner.close 下看到一条红线,告诉我这是无法访问的代码。我做错了什么?

public class crypt {    

static final char FIRST = ' ';
static final char LAST = ']';

static final int RANGE = LAST-FIRST+1;

public static void main(String[] args) {
    safe("");

}

public static boolean safe(String word) {
    Scanner myScanner = new Scanner(System.in);
    word = myScanner.nextLine();
    String upper = word.toUpperCase();
        for (int i=0; i<upper.length(); i++) {
            char c = upper.charAt(i);
                if (c < FIRST && c > LAST) {
                    return true;
                }
        }
    return false;
    myScanner.close();
} 

【问题讨论】:

  • 你看过myScanner.close();上面那一行的内容了吗?
  • 那条线确实无法到达,因为你永远无法到达它——你首先从函数中return
  • 你真的不需要再使用Scanner.close()了,对吧?

标签: java unreachable-code


【解决方案1】:

您需要将myScanner.close(); 移动到“return false;”之前的行。另一件需要注意的事情 - 当您返回 true 时,您并没有关闭扫描仪。您可能需要在return true; 前面添加myScanner.close();

public static boolean safeToUse(String plaintext) {
    Scanner myScanner = new Scanner(System.in);
    plaintext = myScanner.nextLine();
    String upper = plaintext.toUpperCase();
        for (int i=0; i<upper.length(); i++) {
            char c = upper.charAt(i);
                if (c < FIRST && c > LAST) {
                    myScanner.close(); //Close the scanner before you return true
                    return true;
                }
        }
    myScanner.close(); //close the scanner before you return.
    return false;
} 

当你在一个函数中时,代码不会在你return之后执行。将return 视为代码中的一个停止点。当它到达这一点时,它将转到调用该方法/函数(在您的情况下为 safeToUse())的位置。

一种跟踪和更好地理解代码执行的好方法,它可以单步执行您的程序,尽管您必须先进行建议的更改才能使其编译。

【讨论】:

    【解决方案2】:

    这一行:

    return false;
    

    停止函数返回结果“false”,所以这条语句后面的代码不会被执行。

    另外,您应该在使用后关闭扫描仪,因此请先移动

    myScanner.close();
    

    statement BEFORE "return false;",并在 "return true;" 之前添加声明。

    【讨论】:

      【解决方案3】:

      一旦调用return语句,下一行将不会被执行,这会导致编译错误。

      【讨论】:

        猜你喜欢
        • 2018-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-03
        • 1970-01-01
        • 2014-08-27
        • 2011-12-30
        • 2011-07-24
        相关资源
        最近更新 更多