2013-06-25 2 views
2

Это простой выбор вопрос, а затем ответ программы:Вход Java остается пустым?

import java.util.Scanner; 

public class Mains { 

    static Scanner console = new Scanner(System.in); 
    static Tof tof = new Tof(); 
    static int Ievel = 0; 
    static int Input = 0; 
    static boolean GAME = true; 
    static boolean AT_START = true; 
    static boolean IN_QUESTION = false; 

    public static void main (String[] args) { 
     while (GAME) { 
      String InputS = ""; 

      if (AT_START) { 
       System.out.println("Welcome to the game! Please select a number from 1 to 10."); 
       AT_START = false; 
      } 

      if (!IN_QUESTION)    
       Input = console.nextInt(); 

      if (Input == -1) { 
       GAME = false; 
       console.close(); 
      } else { 
       String question = tof.getQuestion(Input); 
       String answer = tof.getAnswer(Input); 

       System.out.println(question); 

       IN_QUESTION = true; 

       while (IN_QUESTION) { 
        InputS = console.nextLine(); 
        if (InputS != console.nextLine()) { 
         if (InputS.equals(answer)) { 
          System.out.println("Correct!"); 
         } else { 
          System.out.println("Incorrect. " + InputS + " " + answer); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

Проблема:

При входе в цикл IN_QUESTION, и писать ответ, он всегда будет неправильным. Это потому, что переменная InputS ВСЕГДА пуста, несмотря ни на что, хотя на ней есть console.nextLine().

Почему это пусто? Как это исправить?

В-случае вам нужен другой класс TOF: http://pastebin.com/Fn5HEpL2

+0

Каковы ваши консольные входы? Кроме того, вы должны воздерживаться от ввода имен переменных в верхнем регистре. InputS должны быть inputS и вход должен вводиться в соответствии с условными обозначениями кода. Статические переменные в верхнем регистре также должны следовать правилу кода. Все верхние регистры обычно только для констант. http://www.oracle.com/technetwork/java/codeconv-138413.html Если вы будете следовать кодовым соглашениям, другим разработчикам java будет намного проще дешифровать ваш код. – JREN

+0

Я помещаю «true», и «false» и random, ones, все неверны. и когда я печатаю InputS, печать будет пустой. – user2519738

ответ

2

nextInt не получает терминатор линии после целого числа, и вы дважды читаете его с консоли (второй раз в инструкции if).

Так что, если вы вводите:

123 
apple 

происходит следующее:

  • Input получает присваивается значение 123
  • InputS получает присваивается пустая строка
  • InputS получает по сравнению с apple и он не равен (от InputS != console.nextLine() - Я не знаю, почему это там)

Вы можете исправить это:

  • Обрамление console.nextLine(); после console.nextInt();
    ИЛИ
    Использование Input = Integer.parseInt(console.nextLine()) вместо nextInt

  • Снятие этого оборудования - if (InputS != console.nextLine())

+0

Спасибо, это решило проблему. – user2519738

0

Вы называете console.nextLine дважды. Это означает, что вы читаете строку, которую вы проверите, а другая - нет. Вероятно, это не то, что вам нужно. Также обратите внимание, что ваш начальный вызов nextInt не будет использовать новую строку, нажатую после ввода номера. После этого вам понадобится nextLine, но до основного цикла.

Некоторые общие замечания:

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

Вы читаете с консоли дважды.Это должно работать:

while (IN_QUESTION) { 
    InputS = console.nextLine(); 
    if (InputS.equals(answer)) { 
     System.out.println("Correct!"); 
    } else { 
     System.out.println("Incorrect. " + InputS + " " + answer); 
    } 
} 
0

Проблема заключается в том, что символ новой строки не был прочитан методом nextInt() поэтому остается в буфере сканера и когда в следующий раз вы назвали nextLine() этот символ был напечатан первым.

Это, как решить проблему:

//empty the newline character from the scanner 
console.nextLine(); 
while (IN_QUESTION) { 
    InputS= console.nextLine(); 
    if (InputS.equals(answer)) { 
     System.out.println("Correct!"); 
    } else { 
     System.out.println("Incorrect. " + InputS + " " + answer); 
    } 
} 
Смежные вопросы