2010-10-29 158 views
1

我想用多邊形做一些計算。所以我需要用戶輸入一些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(); 
    } 

但是循環中的輸入只是執行一個。所以休息條件有些問題。

有什麼想法?

回答

4

你應該有或(||),不和(& &)

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

你想,只要x不等於FX或Y contine是FY不等於 - 即

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

in pseudo code。使用當前的代碼,只要x和y中的一個與初始值相同,就會終止循環。

2

正如保羅所說,你應該有「||」 (或運營商)而不是「& &」(和運營商)在while條件。你想循環,直到兩者都是相同的,所以你想要繼續,如果任一不平等。

同樣重要的是,您不應該將等於比較用於浮點比較。浮點不精確意味着你不應該依賴這些值完全相等。雖然很有可能從文件中讀取的相同值在機器表示中產生完全相同的值,但不能保證。您應該考慮更改文件格式以用其他方式指示多邊形的末端。如果這是不可能的,考慮使用不太精確的比較,如coordiantes等於一些小的精確度(比如1e-6)。所以:

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