Чтение и проверка строк из пользовательского ввода - PullRequest
4 голосов
/ 29 декабря 2011

У меня есть этот код:

import java.util.Scanner;

public class Example {
public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    String answer = input.nextLine();

    if(answer == "yes"){
        System.out.println("Yea I programmed this right!");
    }else{
        System.out.println("Awww :(");
    }
  }
}

Но когда я запускаю его и набираю yes , должно быть сказано

«Да, я запрограммировал это правильно!»

но там написано

" Awww: ("

Ответы [ 6 ]

9 голосов
/ 29 декабря 2011

Вы сравниваете строки неправильно.Вы должны использовать метод equals(), например:

if (answer.equals("yes"))

При программировании на Java оператор == обычно используется для сравнения примитивных типов данных (int, double, так далее.).Если вы используете == для сравнения двух типов объектов (например, строк), вы сравниваете их для identity , то есть проверяете, ссылаются ли они на один и тот же объект в памяти.В вашем случае вам нужно сравнить, если они равны : если они имеют одно и то же значение (в данном случае строку символов), даже если это два разных объекта - и для этогоВы должны использовать метод equals().

РЕДАКТИРОВАТЬ:

Еще лучше, для предотвращения NullPointerException, считается хорошей практикой перевернуть порядок сравненияи сначала напишите строку, с которой вы сравниваете, например:

if ("yes".equals(answer))

Объяснение простое: если по какой-то причине answer равно null, приведенное выше сравнение оценивается как false (значение: answer не равно "yes"), тогда как первая версия кода вызовет NullPointerException при попытке вызвать метод equals() для значения null.

2 голосов
/ 29 декабря 2011
if(answer == "yes"){

должно быть

if("yes".equals(answer)){

(== неверно для String равенства, и мы рассматриваем случай, когда answer равен нулю)

1 голос
/ 29 декабря 2011

Изменить это

if(answer.equals("yes")){
    System.out.println("Yea I programmed this right!");
}else{
    System.out.println("Awww :(");
}

Метод equals() сравнивает эту строку ( ответ в вашем примере ) с указанным объектом. Результат имеет значение true тогда и только тогда, когда аргумент не равен NULL и является объектом String, представляющим ту же последовательность символов, что и этот объект.

Важно понимать, что метод equals() и оператор == выполняют две разные операции. Как только что упоминалось, метод equals() сравнивает символы внутри объекта String. Оператор == сравнивает две ссылки на объекты, чтобы определить, ссылаются ли они на один и тот же экземпляр.

1 голос
/ 29 декабря 2011

Используйте String.equals() вместо ==.

В Java == проверяет, что 2 строки - это один и тот же экземпляр, где "a"! = "A". Вместо этого вам нужно проверить на "a".equals("a").

Так замените

if(answer == "yes"){

с:

if("yes".equals(answer)){

Обратите внимание, что изменение порядка здесь является преднамеренным, так как это может предотвратить исключение NullPointerException, если answer было нулевым - так как "yes".equals(null) просто вернет false, вместо того, чтобы выдавать исключение. (Вызов операции на null вызовет исключение NullPointerException, т. Е. null.equals("yes").)

0 голосов
/ 18 апреля 2015

или вы можете попробовать использовать функцию "CompareTo ()"

private static Scanner input;
private static String choice;

public static void main(String[] args) {
    // TODO Auto-generated method stub

    input = new Scanner(System.in);
    choice = input.nextLine();

    if (choice.compareTo("yes") == 0) {
        System.out.println("Yea I programmed this right!");
    } else {
        System.out.println("Awww :(");
    }

}
0 голосов
/ 28 августа 2013

import java.util.Scanner;

открытый класс Пример {public static void main (String [] args) {

Scanner input = new Scanner(System.in);
String answer = input.nextLine();

/*Edit your next line as mine,u'll get the correct ans...*/

if("yes".equals(answer)){ 
    System.out.println("Yea I programmed this right!");
}else{
    System.out.println("Awww :(");
}

}}

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