循环中断条件

时间:2010-10-29 15:53:25

标签: java breakpoints while-loop

我想用多边形做一些计算。所以我需要用户输入一些x和y坐标。这由以下代码执行:

private static boolean isX = true;
private static Scanner scanner = new Scanner(System.in);

private static double readDouble() {
    double value = 0;
    System.out.print("Koordinate " + (isX ? "X" : "Y") + " : ");
    value = scanner.nextDouble();
    if (!isX)
        System.out.println("--------------------");
    isX = !isX;
    return value;
}

要计算多边形的轮廓,我需要多边形的总数。输入在循环中执行。当最后一个多边形数据与第一个多边形数据具有相同的坐标时,输入应结束。例如。第一个输入是X:1 Y:1,X:1,X:2将结束输入。

    double fX = readDouble(); double x = 0.0;
    double fY = readDouble(); double y = 0.0;

    int nVertex = 1;

    while((x != fX) && (y != fY)){
        nVertex++;
        x = readDouble(); y = readDouble();
    }

但循环中的输入只执行了一些。所以休息条件有问题。

任何想法?

2 个答案:

答案 0 :(得分:4)

你应该有或(||),而不是和(&&)

   while((x != fX) || (y != fY)){
        nVertex++;
        x = readDouble(); y = readDouble();
    }

只要x不等于fX或者y不等于fY,你想要contine,那就是

NOT (x == fX AND y == fY)
伪代码中的

。使用当前代码,只要x和y中的一个与初始值相同,就会终止循环。

答案 1 :(得分:2)

保罗说,你应该有“||” (或运营商)不是“&&” (和操作员)在while状态下。你想循环直到两者都相同,所以如果两者不相等你想继续。

同样重要的是,您不应该使用等于比较来进行浮点比较。浮点的不精确意味着你不应该依赖这些值完全相等。虽然从文件读取的相同值很可能会在机器表示中产生完全相同的值,但不能保证。您应该考虑更改文件格式以便以其他方式指示多边形的结尾。如果这是不可能的,请考虑使用不太精确的比较,例如坐标等于一些小的精度(比如1e-6)。所以:

while (Math.abs(x-fx)<1e-6 || Math.abs(y-fy)<1e-6) {