我是计算机科学专业的学生,目前仍遇到一个问题。
这是一个简单的程序,要求用户输入数字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();
}
}
}
答案 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();