我該如何編寫一個查詢控制循環,將繼續從用戶輸入int值,每個值添加到總和,然後詢問用戶是否有另一個值來輸入,直到用戶說有沒有更多的價值在java中的查詢控制循環
回答
double sum = 0;
while (user.hasMoreInput()) {
double += user.mostRecentInput();
}
您實現hasMoreInput
和mostRecentInput
你比擬。
呵呵,很好。 +1 :) – Bombe 2009-12-14 15:39:36
確切。將代碼映射到代碼是非常容易:) – 2009-12-14 15:52:35
Java Developer's Almanac始終是諸如您的基本示例的良好來源。
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str = "";
while (str != null) {
System.out.print("> prompt ");
str = in.readLine();
process(str);
}
編輯:顯然有些人認爲一些技術的要點的演示應該有錯誤檢查。也許我也應該評論這些代碼,並提供了一個規範。下次,我還會開發一些自定義註釋來表達事前和事後條件,或者在Eiffel中起草一個實現。
+1:很好的答案,謝謝你的鏈接!但是我敦促讀者在'catch'塊中編寫一些有用的東西。這種譴責異常的可恥行爲造成了各種用戶的挫敗感。我會說這樣的代碼不應該出現在年曆中;它不會傷害他們包含額外的代碼行。 – 2009-12-14 15:37:06
不,我收回它。代碼太可怕了! 'readLine()'後面跟着'process(str)'而沒有空的檢查。像這樣編碼的人沒有商業寫作年曆。 – 2009-12-14 15:39:15
這是一種很奇怪的做REPL的方式 - 當你到達EOF時你將處理一個空字符串。更常用的用法就像'prompt(); for(String cmd;(cmd = in.readLine())!= null;){process(cmd);提示(); }' – gustafc 2009-12-14 15:41:08
這就是我寫這樣一個循環。我不應該爲你寫作業,但我仍然想展示我喜歡的這種循環風格。
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.print("> prompt ");
String str = in.readLine();
if (str == null) break;
process(str);
}
有些人可能不喜歡
while (true)
- 它看起來像一個無限循環因爲它是!這與用戶在輸入輸入時的耐心一樣無限。- 單行
if
- 有些人寧願把它做成一個完全括號的3班輪。但我沒有看到任何用處;結果它不會變得更可讀。 break
in mid-loop。這就是break
!這是你逃脫孵化,否則無限循環。
如果你習慣於閱讀Java代碼,這是習慣和清晰。優點:
- 它顯示了發生的順序完全按照它們發生的順序;
- 它將
str
的範圍限制在需要的位置; - 這是非常明確的終止條件;
- 它非常簡潔。更少的行數=更少的錯誤,我總是說。
有幾件你需要處理。首先,您需要知道如何接收用戶的輸入。 Java開發者的年鑑例子(http://www.exampledepot.com/egs/java.io/ReadFromStdIn.html),我發現這個樣子的:
try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str = "";
while (str != null) {
System.out.print("> prompt ");
str = in.readLine();
process(str);
}
} catch (IOException e) {
}
你可能會取代「>提示符」的東西更多的描述。您還希望有一個更好的方式讓用戶退出,而不是輸入空白行,所以如果他們完成了,也許可以讓他們輸入'q'。然後,將while循環中的比較更改爲!str.toLowerCase()。equals(「q」)。然後,您需要實現處理函數以將字符串轉換爲整數。 Integer.parseInt(String)將返回正確表示整數(即「3」或「49」但不是「7e」)的String的整數值,否則將拋出NumberFormatException。因爲你不希望你的應用程序在錯誤輸入中發生異常而失敗,所以我認爲在非整型字符串的情況下(即,當你捕獲一個NumberFormatException),這個過程可能只返回0。
最後,您需要在主循環之前初始化一個總和變量,並且您可以在每次迭代過程中添加process
的結果。然後當循環結束時,您可以使用System.out.println將process
的結果打印到屏幕上。
我故意遺漏了大部分的代碼,因爲這聽起來像是作業,但如果你能理解所有這一切足夠把它放在一起,我認爲你已經學會了它足夠自己做。
空捕獲?至少做一個printStackTrace!或者根本不抓住......更糟的是如上所述隱藏錯誤。 – 2009-12-14 18:12:35
正如我上面提到的,該代碼只是從該鏈接逐字複製而來。 catch語句不會忽略它的大括號,它只是不縮進。 – danben 2009-12-14 22:03:57
還沒有說關於丟失緊箍的任何東西... – 2009-12-17 19:34:45
這就是我通常的做法。儘可能少的代碼:)。
String s;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while((s = in.readLine()) != null)
process(s);
不是「儘可能少」,贏了2行:'while(process(in.readLine())); ....(不是說我會那樣做) – 2009-12-14 18:16:32
好吧,你需要有一個if(s!= null)裏面的進程,所以目前還不清楚你的版本是否真的很短。 – 2009-12-15 17:03:22
本來是一個笑話,但我仍然不需要'String s;'行,並且很可能我會有一個檢查(空字符串)或至少一個聲明在進程中...... :-) – 2009-12-17 19:32:25
- 1. Java循環控制
- 2. For循環java查詢
- 3. 循環中的SQL查詢循環中
- 4. 在TabControl中循環控制
- 5. 在while循環中查詢
- 6. 循環在SQL查詢中
- 7. 循環內循環在Rails控制器
- 8. 循環中的子查詢
- 9. 循環查詢
- 10. 控制存在時循環
- 11. Selenium Webdriver循環控制,無限循環Java
- 12. 在循環中的MYSQL查詢
- 13. 在循環中執行的SQL查詢
- 14. 在foreach循環中的PDO查詢
- 15. 在foreach循環中的mysqli多查詢
- 16. 在SQL查詢中的無限循環
- 17. 在WHILE循環中的mysqli查詢
- 18. Joomla在foreach循環中的Mysql查詢
- 19. 循環半控制
- 20. 查詢優化的Java - 使用查詢嵌套循環
- 21. LINQ查詢在for循環
- 22. 循環在SQL查詢
- 23. 在for循環內查詢
- 24. 如何在php中查詢一個查詢循環查詢
- 25. 在僅執行一次的循環中查詢Java
- 26. PHP查詢循環
- 27. CTE循環查詢
- 28. I4GL循環查詢
- 29. ETL中的DataflowTask中的循環控制
- 30. Bash forke循環與while循環控制
這功課嗎? – 2009-12-14 15:34:07