Java 如何将一个变量添加到另一个';已经定了

Java 如何将一个变量添加到另一个';已经定了,java,Java,我的家庭作业是创建一个程序,该程序获取一个数字列表,并打印出可被4整除的最大数字 列表如下所示: 12 16 87 58 25 73 86 36 79 40 12 89 32 输入应为: 因为它是可以被四整除的最高数字 这是我的密码: import java.util.Scanner; 公共班机{ 公共静态void main(字符串[]args){ 扫描仪=新的扫描仪(System.in); 保存的int=0; int saved2=0; 对

我的家庭作业是创建一个程序,该程序获取一个数字列表,并打印出可被4整除的最大数字

列表如下所示:

12  
16  
87  
58  
25  
73  
86  
36  
79  
40  
12  
89  
32  
输入应为:
因为它是可以被四整除的最高数字

这是我的密码:

import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
扫描仪=新的扫描仪(System.in);
保存的int=0;
int saved2=0;
对于(int i=scanner.nextInt();i%4==0;i=scanner.nextInt()){
for(布尔布尔布尔值=true;布尔值=true;布尔值^true){
如果(i>已保存){
saved-=saved2;
保存+=i;
saved2+=i;
}
}
系统输出打印项次(已保存);
}
}
}
我的代码的输入是

12  
16  
我真的不明白为什么会这样做,但在我看来,我添加的变量是错误的。关于添加变量的家庭作业页面没有指定如何相互添加变量。
是否有人有改进代码的技巧,或者找到修复代码的方法?谢谢。

欢迎来到Java。

首先你说你得到了输入,但那是输出。输入是您输入的内容,输出是您打印的内容

然后在for循环中有一个错误。你在一个地方发生的事情太多了。根据所实现的逻辑,只要输入的值不能被4整除,程序就会退出第一级for循环

如果您想了解更多信息,请继续阅读循环。 我建议从
开始,而不是从
循环开始。逻辑应该是这样的:
一,。创建变量以保存正确答案
已保存
二,。创建另一个以保存从控制台读取的值
i
三,。使用条件
i=scanner.nextInt()
while启动
循环
3.1检查刚刚输入的
i
值是否可被4整除 3.2如果是,则比较是否大于之前保存的值(最初
保存的
值将为0)
3.3如果较大,则将读取值
i
分配给
保存的


四,。循环结束时,您将在保存的
变量中获得可被4整除的最大数字。打印出来。

根据

只要所有输入都可以被4整除,这就是为什么它以16结尾,因为87不能被4整除

for (boolean bull = true; bull == true ;bull ^= true)
这需要您进行解释,但我非常确定它无条件地只执行一次内部循环体。(不是100%确定,因为
true
false
的表示形式在您的机器中可能会很奇怪。如果0表示
true
,即真的很奇怪,那么它是一个无休止的循环,与您描述的输出不匹配……)

除了最后一个不是4的倍数外,每个输入只执行一次

保存的
值与输入值相同,只要它在增加

这些提示解释了意外的输出。

如果您检查问题的详细信息,您应该能够改进您的编码尝试。

这就是我如何快速修复代码的。 请注意,没有关于可能的最小值以及如何停止输入的语句。因此,解决方案非常简单,它只读取输入,直到整数出现

在处理来自
扫描仪的输入时可能很有用

我希望代码中的注释会有所帮助。如果有任何问题,请添加评论。祝你好运

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.
    }
}

你是否混淆了输入和输出?列表是您的输入,您所描述的输入似乎是输出给我的。请解释一下您在这些有趣的for循环构造背后的想法。这是你缩进的一部分,似乎有误导性。通过对一致性进行一些更改,至少可以更清楚地了解为什么有多个输出。
for(boolean bull=true;bull==true;bull^=true)
这看起来非常奇怪。这句话是什么意思?您是否希望
bull
变量发生变化?这也是一种很好的回答方法,可以帮助您回答问题,而不必仅仅给出家庭作业问题的答案。谢谢!我将进一步研究while循环。这个解释给了我一点while循环,更多的是for循环,所以我不确定我们是否应该使用它们。你知道我在回答中提供的链接中的讨论吗?你似乎忽视了提议中的妥协。这很有帮助,但我并不是真的在寻找解决方案。不过很有帮助!
System.out.println(saved);
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.
    }
}