簡體   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