在 java 中关闭扫描器时无法访问代码?

Unreachable code when closing scanner in java?

当我尝试关闭 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();
} 

这一行:

return false;

停止函数return结果为“false”,所以这条语句后面的代码不会执行.

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

myScanner.close();

statement BEFORE "return false;",并将其添加到 "return true;" 语句之前。

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

您需要将 myScanner.close(); 移动到 'return false;' 之前的行。另一件需要注意的事情 - 当你 return 为真时你并没有关闭扫描仪。您可能需要在 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 视为代码中的停止点。当它到达这一点时,它将转到调用 method/function(在您的情况下为 safeToUse())的位置。

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