3 回答

TA貢獻1812條經驗 獲得超5個贊
歡迎來到爪哇。
首先你說你得到了輸入,但那是輸出。輸入是您輸入的內容,輸出是您打印的內容。
然后你的 for 循環中有一個錯誤。你在一個地方發生了太多事情。根據實現的邏輯,只要您輸入的值不能被 4 整除,您的程序就會退出第一級 for 循環。
如果您想了解更多信息,請繼續閱讀 for loops https://www.learnjavaonline.org/en/Loops。
我建議改為從循環開始while
。邏輯應該是這樣的:
1. 創建變量來保存正確答案saved
2.創建另一個來保存從控制臺讀取的值i
while
3.有條件開始循環i = scanner.nextInt()
3.1 檢查剛剛輸入的值是否i
能被4整除
3.2 如果是,則比較是否比之前保存的大(初始saved
值為0)
3.3 如果比較大,則將讀取i
到的值賦值給saved
4. 在循環結束時,saved
變量中將有可被 4 整除的最大數字。打印出來。

TA貢獻1780條經驗 獲得超4個贊
for (int i = scanner.nextInt(); i % 4 == 0;i = scanner.nextInt())
只要所有輸入都可以被 4 整除,這只會讀取,這就是它以 16 結尾的原因,因為 87 不能被 4 整除。
for (boolean bull = true; bull == true ;bull ^= true)
這需要你的解釋,但我很確定它無條件地只執行一次內部循環體。true
(不是 100% 確定,因為和的表示false
在您的機器中可能很奇怪。如果 0 是 的表示true
,即真的很奇怪,那么它是一個無限循環,與您描述的輸出不匹配......)
System.out.println(saved);
這對每個輸入只執行一次,除了最后一個,它不是 4 的倍數。
的值saved
與輸入相同,只要它是遞增的。
這些提示解釋了意外的輸出。
如果您檢查問題的詳細信息,您應該能夠改進您的編碼嘗試。

TA貢獻2041條經驗 獲得超4個贊
這就是我在您的代碼中快速修復的方式。請注意,沒有關于可能的最小值以及如何停止輸入的陳述。因此,解決方案非常簡單,它只讀取輸入,直到那里出現整數。
這篇文章可能對處理來自Scanner
.
我希望代碼中的注釋會有所幫助。如果有任何問題,請添加評論。祝你好運!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int currentMax = Integer.MIN_VALUE; // you may set negative or 0 if you know that all the input is positive
// int saved2 = 0; // no need for this variable
while (scanner.hasNextInt()) { // you can make a better input handling, especially if you know when it should end the input. Now it will end on any non-integer input line
int i = scanner.nextInt();
// for (int i = scanner.nextInt(); i % 4 == 0; i = scanner.nextInt()) {
// for (boolean bull = true; bull == true; bull ^= true) {
if (((i % 4) == 0) && (i > currentMax)) {
currentMax = i;
// saved -= saved2;
// saved += i;
// saved2 += i;
// }
}
}
System.out.println(currentMax); // moved out of "for" or "while" cycles. Print the value after the input has ended.
}
}
添加回答
舉報