2013-11-21 2 views
0

Мой цикл while по какой-то причине продолжает пропускать мою входную строку. Мой код выглядит следующим образом:Пока цикл не будет зацикливаться

import java.util.Scanner; 
public class CalorieCalculator { 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    Calories[] array = {new Calories("spinach", 23), new Calories("potato", 160), new Calories("yogurt", 230), new Calories("milk", 85), 
      new Calories("bread", 65), new Calories("rice", 178), new Calories("watermelon", 110), new Calories("papaya", 156), 
      new Calories("tuna", 575), new Calories("lobster", 405)}; 
    System.out.print("Do you want to eat food <Y or N>? "); 
    String answer = input.nextLine(); 
    int totalCal = 0; 
    while (answer.equalsIgnoreCase("y")){ 
     System.out.print("What kind of food would you like?"); 
     String answer2 = input.nextLine(); 
     System.out.print("How many servings?: "); 
     int servings = input.nextInt(); 
     for (int i = 0; i < array.length; i++){ 
      if (array[i].getName().equalsIgnoreCase(answer2)) 
       totalCal = totalCal + (servings*array[i].getCalorie()); 
     }//end for loop 
     System.out.print("Do you want to eat more food <Y or N>? "); 
     answer = input.nextLine(); 
    }//end while loop 
    System.out.println("The total calories of your meal are " + totalCal); 

}//end main method 
}//end CalorieCalculator class 

После того, как он попадает в конце цикла, где он просит вас, если вы хотите, чтобы поесть снова, цикл в то время как только заканчивается прямо там и идет к концу программы вместо давая мне возможность ввода. Я не могу понять, почему это так. Заранее спасибо.

ответ

3

Это из-за того, как Scanner.nextInt() и Scanner.nextLine() работы. Если Scanner считывает int и затем заканчивается в конце строки, Scanner.nextLine() мгновенно просто замечает разрыв строки и дает вам оставшуюся строку (которая пуста).

После nextInt() вызова, добавьте input.nextLine() вызов:

int servings = input.nextInt(); 
input.nextLine(); //this is the empty remainder of the line 

Это должно исправить.

0

Мой цикл while по какой-то причине продолжает пропускать мою линию ввода.

Использовать next() вместо nextLine(). Измените петлю while, как показано ниже:

int totalCal = 0; 
    while (true){ 
     System.out.print("Do you want to eat food <Y or N>? "); 
    String answer = input.nextLine(); 

    if("N".equalsIgnoreCase(answer)){ 
     break; 
    } 

    System.out.print("What kind of food would you like?"); 
    String answer2 = input.next(); 
    System.out.print("How many servings?: "); 
    int servings = input.nextInt(); 
    //.... 
    } 
Смежные вопросы