2016-08-06 3 views
1

Привет Я новичок в java и пытаюсь сделать викторину для практики. Я хочу задать вопрос, где пользователь должен сочетать слова от категорий к парам. Как A1 B4 C3 D2. Теперь я использовал инструкцию if else, чтобы проверить, является ли вход правильным ответом, но он работает только с 1A. Для остальных я могу сделать 6 входов, чего я не хочу, и даже если есть правильный, я не понимаю.Ввод Java Scanner с инструкцией if else

public class HelloWorld { 

    public static void main(String[] args) { 

     Scanner walther = new Scanner(System.in); 

     String cro = "1A"; 
     String dan = "2C"; 
     String fin = "4D"; 
     String dut = "3F"; 
     String fre = "5B"; 
     String ger = "6E"; 
     int x = 0; 


     if (cro.equalsIgnoreCase(walther.nextLine())){ 
      ++x; 
      walther.close(); 
     } 
     else if (dan.equalsIgnoreCase(walther.nextLine())){ 
      ++x; 
      walther.close(); 
     } 
     else if (fin.equalsIgnoreCase(walther.nextLine())){ 
      ++x; 
      walther.close(); 
     } 
     else if (dut.equalsIgnoreCase(walther.nextLine())){ 
      ++x; 
      walther.close(); 
     } 
     else if (fre.equalsIgnoreCase(walther.nextLine())){ 
      ++x; 
      walther.close(); 
     } 
     else if (ger.equalsIgnoreCase(walther.nextLine())){ 
      ++x; 
      walther.close(); 
     } 
     else { 
      walther.close(); 
     } 

    System.out.println(x + " Point!"); 
    } 
} 
+0

Переосмысление * когда * вы должны вызвать 'walther.nextLine()', чтобы прочитать строку из консоли. Вы делаете это слишком часто прямо сейчас. – Tom

+0

'walther.nextLine()' в первом операторе 'if' потребляет вход, независимо от того, является ли вход равным' cro' или нет. – Arjan

ответ

1

nextLine() Вызов потребляет линию от сканера. Вы делаете это на первом if, поэтому последующие ветви else if, фактически, сравнивают следующие строки (или null, если у вас нет дополнительного ввода). Вместо этого, вы должны потреблять линию только один раз, сохранить его в локальную переменную и использовать его в своих сравнениях:

String input = walther.nextLine(); 
if (cro.equlasIgnoreCase(input)) { // etc... 

Сказав, что, используя и если-иначе структура не опрятных решение. Вы можете сэкономить много кода наворотов через использование case insensitiveTreeSet:

TreeSet<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); 
set.addAll(Arrays.asList("1A", "2C", "4D", "3F", "5B", "6E")); 
String input = walther.nextLine(); 
if (set.contains(input)) { 
    ++x; 
    walther.close(); 
} 
+0

Спасибо за помощь! Я не знал о TreeSet, но я посмотрю, как это работает! – GENIUS

-1

Люди факт остается фактом, что выше, при условии ответа особенно сбивает с толку тех, кто являются относительно новыми для Java сообщества. Следовательно, требование для более простого и простого ответа. Теперь, Java понимает строк только следующий код:

Scanner sc=new Scanner(System.in); String a=sc.next(); if(a.equals("xyzzy")) {System.out.println("yes");

+1

блестящий ответ –

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/17817904) –