2013-11-21 203 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 

一旦它到达的地方,如果你想再吃问你的循环结束,while循环刚刚结束在那里,进到程序的结束,而不是给我选择输入。我无法弄清楚为什么这样做。提前致谢。

回答

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(); 
    //.... 
    }