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条经验 获得超3个赞
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.
}
}
添加回答
举报