扫描仪不等待NewLine通过循环收集输入

时间:2017-07-07 01:44:15

标签: java loops input

我对编码很陌生,并希望你们能帮助我。 我遇到的问题是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();
}

}

2 个答案:

答案 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