Java基礎知識第四彈(循環)

while循環

在循環控制中,不要使用浮點值來比較值是否相等。因爲浮點值都是某些值的近似值,使用它們可能導致不精確的循環次數和不準確的結果,例如下面的代碼:

double item = 1;
double sum = 0;
while(item != 0){
    sum += item;
    item -= 0.1;
}
System.out.println(sum);
//1+0.9+0.8+...+0.1

因爲浮點數在算術上是近似的,所以不能確保item會變成真正的0。從表面上看,這個循環似乎沒有問題,但實際上他是一個無限循環。

輸入和輸出重定向

如果要輸入大量的數值,那麼從鍵盤上輸入時非常繁瑣的事。可以將這些數據用空格隔開,保存在一個名爲input.txt的文本文件中,然後使用下面的命令運行這個程序:

java SentinelValue < input.txt

這個命令稱爲輸入重定向。程序從文件input.txt中讀取輸入,而不是讓用戶在運行時從鍵盤輸入數據。類似的,還有輸出重定向,輸出重定向將輸出發送給文件,而不是將它們顯示在控制檯上。輸出重定向的命令爲:

Java ClassName > output.txt

可以在同一命令中同時使用輸入重定向和輸出重定向。例如,下面的命令從文件input.txt中獲取輸入,並將輸出發生給文件output.txt:

java SentinelValue <input.txt> output.txt

do-while循環

如果循環中的語句至少需要執行一次,建議使用do-while循環。如果使用while循環,那麼這些語句必須在循環前和循環內部都出現。

for循環

如果省略for循環中的循環繼續條件,則隱含的認爲循環繼續條件爲true。for( ; ; ){}等價於for( ; true; )等價於while(true){}

最小化數值錯誤

在循環繼續條件中使用浮點數將導致數值錯誤。方法:在較大數之前先增加較小數是減小誤差的一種方法。(從小到大)

關鍵字break和continue

continue只是跳出了一次迭代(程序控制轉向該循環體的末尾),而break是跳出了整個循環。

注意:continue語句總是在一個循環內。在while和do-while循環中,continue語句之後會馬上計算循環繼續條件;而在for循環中,continue語句之後會立即先執行每次迭代後的動作,再計算循環繼續條件。

注意:很多程序設計語言都有goto語句,goto語句可以隨意地將控制轉移到程序中的任意一條語句上,然後執行它。這使程序很容易出錯。Java中的break語句和continue語句是不同於goto語句的。它們只能運行在循環中或者switch語句中。break語句跳出整個循環,而continue語句跳出循環的當前迭代。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章