Недостижимый код при закрытии сканера в 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();
} 

person Stephany    schedule 05.10.2016    source источник
comment
Вы смотрели, что присутствует в строке над myScanner.close();?   -  person kkaosninja    schedule 06.10.2016
comment
Эта линия действительно недоступна, потому что вы никогда не достигнете ее — вы сначала return из функции.   -  person David T. Macknet    schedule 06.10.2016
comment
Вам больше не нужно использовать Scanner.close(), верно?   -  person RobotKarel314    schedule 06.10.2016


Ответы (3)


Вам нужно переместить myScanner.close(); в строку перед «return false;». Еще одно замечание: вы не закрываете сканер, когда возвращаете true. Вы можете добавить myScanner.close(); перед return true;.

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() в вашем случае).

Хороший способ отслеживания и лучшего понимания выполнения кода — это пошаговое выполнение программы, хотя вам придется сначала внести предлагаемые изменения, чтобы она скомпилировалась.

person Speerian    schedule 05.10.2016

Эта строка:

return false;

остановить функцию, чтобы она вернула результат "false", чтобы код после этого оператора не выполнялся.

Кроме того, вы должны закрыть сканер после его использования, поэтому сначала переместите

myScanner.close();

оператор ПЕРЕД "return false;", а также добавьте его перед "return true;" утверждение.

person Litarvan    schedule 05.10.2016

После вызова оператора return следующая строка не будет выполнена, что приведет к ошибке компиляции.

person HARDI    schedule 05.10.2016