Почему сканер пропускает оператор if else - PullRequest
0 голосов
/ 30 июня 2018

Довольно простой код, если я изменяю строку K на «Bye», я получаю сообщение об ошибке, работает только структура if else, а не if if if else. Пожалуйста, помогите мне понять, почему.

public static void main(String [] args){
    String k = "Hi";
    Scanner scnr = new Scanner(k);
    if (scnr.next().equals("Hi")){
        System.out.println("Yes");
    }
    else if (scnr.next().equals("Bye")){
    System.out.println("No");
    }
    else {
    System.out.println("Maybe");
    }
}

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Вы должны сохранить «следующий» результат в переменной, потому что каждый раз, когда вы вызываете next, вы пытаетесь получить следующий элемент. (https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#next()). Вы можете проверить, есть ли следующий с hasNext. (https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNext())

public static void main(String [] args){
    String k = "Hi";
    Scanner scnr = new Scanner(k);
    String read = scnr.next();
    if (read.equals("Hi")){
        System.out.println("Yes");
    }
    else if (read.equals("Bye")){
    System.out.println("No");
    }
    else {
    System.out.println("Maybe");
    }
}
0 голосов
/ 30 июня 2018

Каждый раз, когда вы вызываете метод next () из экземпляра Scanner, он перемещается (другими словами, он дает вам элемент и двигается дальше.

В конкретном примере, вот что произошло:

public static void main(String [] args){
    String k = "Bye";
    Scanner scnr = new Scanner(k); // scnr is at the start of string k
    if (scnr.next().equals("Hi")){ // scnr gives you "Bye" here; 
                                   // you compare it with constant "Hi" and 
                                   // throw away that variable;
        System.out.println("Yes");
    }
    else if (scnr.next().equals("Bye")){ // here scnr is at the end of string k
                                         // therefore, it can't give you next element
        System.out.println("No");
    }
    else {
        System.out.println("Maybe");
    }
}

Вот как это исправить:

public static void main(String [] args){
    String k = "Hi";
    Scanner scnr = new Scanner(k);
    String myNextElement = scnr.next();
    if (myNextElement.equals("Hi")){
        System.out.println("Yes");
    }
    else if (myNextElement.equals("Bye")){
        System.out.println("No");
    }
    else {
        System.out.println("Maybe");
    }
}
0 голосов
/ 30 июня 2018

Каждый раз, когда вы используете next(), вы продолжаете итерацию, в вашем случае нет элемента для дальнейшей итерации, поэтому сделайте что-то вроде:

public static void main(String [] args){
    String k = "Bye";
    Scanner scnr = new Scanner(k);
    String element = scnr.next();

    if (element.equals("Hi")){
        System.out.println("Yes");
    } else if (element.equals("Bye")){
        System.out.println("No");
    } else {
        System.out.println("Maybe");
    }
}

В вашем случае, если вы не зацикливаетесь, у вас есть только 1 раз, чтобы позвонить next().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...