Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java while循环在与scan.nextLine()交互一次后终止;方法_Java_While Loop_Java.util.scanner - Fatal编程技术网

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

Java while循环在与scan.nextLine()交互一次后终止;方法,java,while-loop,java.util.scanner,Java,While Loop,Java.util.scanner,我是一名刚开始学习计算机科学的学生,目前有一个问题困扰着我。 这是一个简单的程序,它要求用户输入一个数字x,然后为该数字求解一个多项式方程。之后,它应该询问用户是否想继续,如果想继续,就会提示x的新号码。然而,这个程序只要求用户输入x一次,然后在计算多项式后终止。它甚至打印Continue?,但甚至不等待读取下一行,它似乎在之后立即终止。它似乎忽略了response=scan.nextLine()完全 这个问题的目的是学习如何使用while循环和扫描器 有人能看出我的错误并给我一个提示吗 谢谢大

我是一名刚开始学习计算机科学的学生,目前有一个问题困扰着我。 这是一个简单的程序,它要求用户输入一个数字
x
,然后为该数字求解一个多项式方程。之后,它应该询问用户是否想继续,如果想继续,就会提示
x
的新号码。然而,这个程序只要求用户输入x一次,然后在计算多项式后终止。它甚至打印
Continue?
,但甚至不等待读取下一行,它似乎在之后立即终止。它似乎忽略了
response=scan.nextLine()完全

这个问题的目的是学习如何使用while循环和扫描器

有人能看出我的错误并给我一个提示吗

谢谢大家!

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();    
    }
}
}
nextDouble()
只读取double,而不是写入double的行的结尾-因此,当您下次调用
nextLine()
时,它读取该行的(空)剩余部分,该部分不等于“y”,因此它从循环中断

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

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

使用

x= Double.parseDouble(scan.nextLine());
而不是

x = scan.nextDouble();

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

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

非常感谢,这解决了问题。