【问题标题】:While loop break conditionWhile 循环中断条件
【发布时间】:2010-10-30 01:00:41
【问题描述】:

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

但循环中的输入只执行一个。所以中断条件有问题。

有什么想法吗?

【问题讨论】:

    标签: java breakpoints while-loop


    【解决方案1】:

    你应该有 or (||),而不是 and (&&)

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

    只要 x 不等于 fX 或 y 不等于 fY,您就想继续 - 即

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

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

    【讨论】:

      【解决方案2】:

      正如保罗所说,你应该有“||” (或运算符)在 while 条件中不是“&&”(和运算符)。您想循环直到两者相同,因此如果其中一个不相等,您想继续。

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

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

      【讨论】:

        猜你喜欢
        • 2014-06-26
        • 2020-10-30
        • 1970-01-01
        • 1970-01-01
        • 2017-08-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        • 2016-03-30
        相关资源
        最近更新 更多