2015-02-22 2 views
0

Это продолжение предыдущего вопроса, на который я не смог получить ответ. Проблема в том, что, когда я пытаюсь завершить программу с помощью метода System.exit (0) с помощью оператора switch и ключевого слова «End», код больше не работает, как следует, только каждый второй целочисленный ввод теперь считывается компьютер. Вот мой метод, который больше не работает:завершение программы через system.exit (0) в java

public static int[] ourGuess() { 
    int[] guessed = new int[4]; 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Take your guess:"); 
    switch (scan.nextLine()) { 
    case "End": 
     System.exit(0); 
     break; 
    } 
    guess = scan.nextInt(); 
    int mod = 10; 
    int div = 1; 
    for (int i = 3; i >= 0; i--) { 
     int num = (guess % mod)/div; 
     guessed[i] = num; 
     div = div * 10; 
     mod = mod * 10; 
    } 
    return guessed; 
} 

Класс является реализация Java из вдохновителя игры. Спасибо за помощь!

+0

Это потому, что 'nextInt' не использует' \ n', который ранее был введен 'nextLine'. Добавьте 'nextLine' сразу после' nextInt', и все будет в порядке. – Maroun

+0

@MarounMaroun, это не проблема, я думаю. Проблема заключается в чтении двух значений. –

ответ

1

Вы читаете два значения из Scanner.

Сначала вы читаете значение с scan.nextLine(), затем вы отбрасываете это значение и читаете другое с помощью scan.nextInt().

Вы должны сохранить считанное значение и использовать его:

final String line = scan.nextLine(); 
if(line.equals("End")) { 
    return guessed; 
} 
final int guessed = Integer.parseInt(line); 

Вы также не должны вызывать System.exit.

+0

, который отлично работал! –

+0

@AlanMurphy, если ответ ответил на ваш вопрос, рассмотрите [его принятие] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –

0

Прежде всего, вы не должны использовать оператор switch для одного случая. Кроме того, если прочитанная строка не «End», а int, вы пропускаете ее. Попытайтесь:

String next = scan.nextLine(); 
if(next.equalsIgnoreCase("End")) System.exit(0); 

Затем проверьте, является ли следующий фактический int, который был угадан, иначе прочитайте следующий int.

0

При звонке nextLine() и nextInt(), вы прочитаете две вещи из потока. Вместо этого кэшировать значение nextLine():

String line = scan.nextLine(); 
switch (line) { ...} 

затем использовать это следующим образом:

guess = Integer.parseInt(line); 
Смежные вопросы