Java while循环在与scan.nextLine()进行一次交互后终止;方法

时间:2013-12-28 16:11:15

标签: java while-loop java.util.scanner

我是计算机科学专业的学生,​​目前仍遇到一个问题。 这是一个简单的程序,要求用户输入数字x,然后求解该数字的多项式方程。之后,应该询问用户是否要继续,如果是,则提示x的新号码。但是,此程序仅向用户询问x一次,然后在评估多项式后终止。它甚至打印Continue?但是甚至不等待在下一行读取,它似乎在之后终止。它似乎完全忽略了response = scan.nextLine();

这个问题的目标是学习如何使用while循环和Scanner。

任何人都可以看到我的错误并给我一个提示吗?

谢谢!

import java.util.Scanner;

class EvalPoly
{
    public static void main (String[] args)
    {

    Scanner scan = new Scanner (System.in);

    double x;       // a value to use with the polynomial
    double result;  // result of evaluating the polynomial at x
    String response = "y"; // yes or no

    while ( response.equals("y") )
    {
        // Get a value for x
        System.out.println("Enter a value for x:");
        x = scan.nextDouble();

        // Evaluate the polynomial
        result = (7 * x * x * x) - (3 * x * x) + (4 * x) - (12);

        // Print out the result
        System.out.println("The result of the polynomial at x = " + x +" is: " +                                result + "\n");

        // Aks user if the program should continue
        // The users answer is "response"
        System.out.println ("continue (y or n)?");
         response = scan.nextLine();    
    }
}
}

3 个答案:

答案 0 :(得分:1)

nextDouble()只读取double,而不是写入double的行的结尾 - 所以当你下次调用nextLine()时,它会读取该行的(空)余数,这不是' t等于“y”,因此它从循环中断开。

nextLine()调用之后直接放置nextDouble()应该通过使用此空行的其余部分来修复它。

使用nextDouble()nextInt()时请注意这一点 - 这是经常犯的错误!

答案 1 :(得分:1)

使用

x= Double.parseDouble(scan.nextLine());

而不是

x = scan.nextDouble();

答案 2 :(得分:0)

这是因为当您键入数字并按“Return”时,nextInt只接受输入的整数,因此“Return -End of Line”仍然是该行的一部分,该行被分配给您的响应变量,并且在while循环中进行评估,并且失败导致它不等于'y'。解决方案是在阅读响应之前跳过一行。

 System.out.println ("continue (y or n)?");
 scan.nextLine();
 response = scan.nextLine();