我对编码很陌生,并希望你们能帮助我。 我遇到的问题是nextDouble没有等待print.ln收集数据。 通过我的启动输入,我必须输入两个数字才能移动到下一行,并要求我已经放入的第二个数字因为它没有等待。 到那时它还决定要求第三个数字并接受那个数字的输入,但是没有问题可以要求第三个和第四个数字。 它重复时也会在循环内部发生。
我知道使用nextDouble并不意味着它会等待"对于换行符我知道nextNumbertype没有新行标志,但通常的技巧 添加" input.nextLine"获得双倍后似乎没有工作。
我知道我可以将所有输入作为字符串并稍后进行转换,但这是一项家庭作业,我的教授似乎想要一些非常具体的方法。
对于什么是错误或我可以尝试的任何想法?
以下是输出:
Enter x1 or <crtl + z> to quit
1
4
Please input the x2 number:
Please input the y1 number:
1
Please input the y2 number:
5
Distance is 5.000000
Enter x1 or <crtl + z> to quit
以下是实际代码:
import java.util.Scanner;
public class distanceFinder {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
double x1 = 0;
System.out.println("Enter x1 or <crtl + z> to quit");
x1 = input.nextDouble();
while(input.hasNext())
{
System.out.println("Please input the x2 number:");
double x2 = input.nextDouble();
System.out.println("Please input the y1 number:");
double y1 = input.nextDouble();
System.out.println("Please input the y2 number:");
double y2 = input.nextDouble();
double x3 = 0;
double y3 = 0;
double xy1 = 0;
x3 = Math.pow((x2 - x1), 2);
y3 = Math.pow((y2 - y1), 2);
xy1 = x3 + y3;
double distance = Math.sqrt(xy1);
System.out.printf("Distance is %.6f %n%n%n", distance);
System.out.println("Enter x1 or <crtl + z> to quit");
x1 = input.nextDouble();
}
input.close();
}
}
答案 0 :(得分:1)
问题是Scanner.hasNext()
阻塞直到有输入。输入内容后,它会进入循环,执行第一个print语句,获取输入,打印第二个语句,然后等待下一个输入。
另一个问题是,您在阅读hasNext()
之前而不是x2
之前检查x1
。请尝试使用此结构:
System.out.println("Enter x1 or <crtl + z> to quit");
while (input.hasNext()) {
double x1 = input.nextDouble();
System.out.println("Please input the x2 number:");
double x2 = input.nextDouble();
//...
System.out.println("Enter x1 or <crtl + z> to quit");
}
答案 1 :(得分:0)
您需要更正代码:
Enter x1 or <crtl + z> to quit
1
Please input the x2 number:
2
Please input the y1 number:
1
Please input the y2 number:
3
Distance is 2.236068
Enter x1 or <crtl + z> to quit
1
Please input the x2 number:
2
Please input the y1 number:
1
Please input the y2 number:
3
Distance is 2.236068
Enter x1 or <crtl + z> to quit
<强>输出:强>
Log