[英]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.