2013-08-21 3 views
-5

Я новичок в Java, и я пытаюсь создать приложение Java, где он попросит вас написать «Java», и если вы его правильно произнесете, он наберет «да», однако набирает «нет», что я делаю неправильно:Сканер не работает?

package quiz; 
import java.util.Scanner; 
public class quiz { 
    public static void main(String[] args) { 
     Scanner kirill = new Scanner(System.in); 
     System.out.println(kirill.next()); 
     String kirill2 = "Java"; 
     if (kirill.equals(kirill2)){ 
      System.out.println("yes"); 
     }else{ 
      System.out.println("no"); 
     } 
     System.out.println(kirill); 
     kirill.close(); 
    } 

} 

Запуск кода: Java

Java

нет

java.util.Scanner [разделители = \ р {javaWhitespace} +] [позиционирования n = 4] [match valid = true] [required input = false] [source closed = false] [skipped = false] [разделитель групп = \,] [разделитель десятичных чисел =.] [положительный префикс =] [отрицательный префикс = \ Q- \ Е] [положительный суффикс =] [отрицательный суффикс =] [NaN строка = \ Q? \ Е] [бесконечность строки = \ Q? \ Е]

+0

Вы должны рассмотреть возможность использования значащих имен переменных, даже если они и то же слово в качестве имени класса. Кроме того, попробуйте выполнить свой код в отладчике и выкрикнуть значения вещей. Действительно ли две строки одинаково равны? Возможно, тот, который вы читаете с консоли, имеет новую строку в конце или что-то в этом роде. – millimoose

+0

Имена пакетов обычно представляют собой 'com.example.name', а имена классов обычно начинаются с букв-капитолий. –

+1

Мы знаем, что вы любите свое имя пользователя, но оно должно остановиться. –

ответ

5
if (kirill.equals(kirill2)){ 

kirill является объектом Scanner, а не строка. Попробуйте что-то вроде этого:

Scanner kirill = new Scanner(System.in); 
String userInput = kirill.next(); 
if (userInput.equals("Java")){ 
    ... 

Кроме того, обратите внимание, что ваш код будет печатать «да», если пользователь «Java является программирование Langauge.» Если вы только хотите, чтобы это подтвердить только с помощью «Java», замените next на nextLine.

0
package quiz; 
import java.util.Scanner; 
public class quiz { 
    public static void main(String[] args) { 
     String kirill; 
     String kirill2 = "Java"; 
     Scanner input = new Scanner(System.in); 
     kirill = input.next(); 
     if (kirill.equals(kirill2)){ 
      System.out.println("yes"); 
     }else{ 
      System.out.println("no"); 
     } 
     System.out.println(kirill); 
     input.close(); 
    } 

} 

Незначительная проблема с вашим Scanner. Вы пытались сопоставить Scanner с номером String. Ты не можешь этого глупо!

+1

+1 и основные проблемы с именами переменных :) –

0

Сохраните, что вы читаете в String, вместо сравнения объекта Scanner с String. Ваш метод main должен выглядеть как

public static void main(String[] args) { 
    Scanner kirill = new Scanner(System.in); 
    String input = kirill.nextLine(); 
    System.out.println(input); 
    String kirill2 = "Java"; 
    if (input.equals(kirill2)){ 
     System.out.println("yes"); 
    }else{ 
     System.out.println("no"); 
    } 
    System.out.println(kirill); 
    kirill.close(); 
} 

Кроме того, обратите внимание, что .next() будет сканировать только первый разделитель (который по умолчанию пробельного), так что если вы хотите, чтобы убедиться, что пользователь только типы "Java" , то вы, вероятно, должны использовать .nextLine() вместо .next().

0

Давайте бросим быстрый взгляд на ваш код, внутри main():

Scanner kirill = new Scanner(System.in); 

создает сканер и присваивает его переменной, OK.

System.out.println(kirill.next()); 

Отпечатки какие типы пользователей, но не назначать его ни к чему.

String kirill2 = "Java"; 

Просто переменная String ... ОК.

if (input.equals(kirill2)){ 

Если сканер равен некоторому тексту, продолжайте. Подождите, вы видите, что я только что сказал? Сравнение сканера и строки. Это не закончится правильно.Представьте себе робота, и вы дадите ему чашку с водой и бумагу с «водой», написанную на ней, и спросите, равны ли они. Очевидно, что это не так, и их не может быть. Вы сравниваете заданное значение с другим установленным значением, а не с пользователем. Ниже будет правильно:

package quiz; 
import java.util.Scanner; 
public class quiz { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); //creates a scanner 
     String text = "Java";     //creates the text to be compared 
     String input = scan.nextLine();  //read some arbitrary text the user types 
     if (input.equals(text)){    //checks if user's input is equal to text 
      System.out.println("yes"); 
     }else{ 
      System.out.println("no"); 
     } 
     scan.close();       //closes the Scanner 
    } 
} 

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

0

Так вот, проще метод был бы:

package quiz; 
import java.util.Scanner; 

public static void main(String[] args) { 

String userInput; 
String word = "Java": 

Scanner in1 = new Scanner(System.in); 
userInput = in1.next(); 
System.out.println(userInput); 

if (word.equals(userInput)) { 
    System.out.println("Yes!"); 
    }else{ 
     System.out.println("No."); 
     } 

System.out.println(userInput); 
userInput.close(); 

}

Смежные вопросы