繁体   English   中英

While循环中断条件

[英]While loop break condition

我想对多边形进行一些计算。 所以我需要用户输入一些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();
    }

但是循环中的输入只能执行一次。 因此中断条件出了点问题。

有任何想法吗?

您应该有或(||),没有和(&&)

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

只要x不等于fX或y不等于fY,您就想构造-

NOT (x == fX AND y == fY)

用伪代码。 使用当前代码,一旦x和y之一与初始值相同,就将终止循环。

正如保罗所说,您应该使用“ ||” (或运算符)在while条件中不是“ &&”(和运算符)。 您要循环直到两者都相同,所以如果两者都不相等,则要继续。

同样重要的是,不应将等于比较用于浮点比较。 浮点数的不精确性意味着您不应依赖于值完全相等。 虽然从文件中读取的相同值很可能在机器表示中产生完全相同的值,但不能保证。 您应该考虑更改文件格式,以其他方式指示多边形的终点。 如果无法做到这一点,请考虑使用不太精确的比较,例如,coordiantes等于某个较小的精度水平(例如1e-6)。 所以:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM