Java 求偶数和偶数最大值

Java 求偶数和偶数最大值,java,algorithm,sum,max,java.util.scanner,Java,Algorithm,Sum,Max,Java.util.scanner,我试图从用户输入的数字中找到偶数和偶数最大值。例如,如果他们用4回答“多少个整数?”并输入整数:2、9、18、4,则应输出: how many integers? 4 next integer? 2 next integer? 9 next integer? 18 next integer? 4 even sum = 24 even max = 18 这是我的密码: public static void evenSum(){ //prompt the user to e

我试图从用户输入的数字中找到偶数和偶数最大值。例如,如果他们用4回答“多少个整数?”并输入整数:2、9、18、4,则应输出:

how many integers? 4
next integer? 2
next integer? 9
next integer? 18
next integer? 4
even sum = 24
even max = 18
这是我的密码:

    public static void evenSum(){
        //prompt the user to enter the amount of integers
        Scanner console = new Scanner(System.in);
        System.out.print("how many integers? ");
        int numbers = console.nextInt();
        //prompt user to enter the first integer
        System.out.print("next integer? ");
        int firstNum = console.nextInt();
        //set the even max to the firstNum
        int evenMax = firstNum;
        //set the evenSum to zero
        int evenSum = 0;
        //for loop for the number of times to ask user to input numbers
        for (int i = 2; i <= numbers; i++) {
            System.out.print("next integer? ");
            int num = console.nextInt();
            //check to see if the first number is even
            if (firstNum % 2 == 0){
            //if it is even then add it to the evenSum
                evenSum += firstNum;
            }
            //check to see if the numbers entered are even
            if (num % 2 == 0) {
            //if they are even add them to the evenSum
                evenSum += num;
            }
            //check to see if the number entered is bigger than the first number
            if (num > firstNum) {
                if (num % 2 == 0 ) {
                    evenMax = num;
                }
            }
        }
        System.out.println("even sum = " +evenSum);
        System.out.println("even max = " +evenMax);
}

有人能帮我找出问题所在吗?

将for循环中的以下代码移到for循环之前-

if (firstNum % 2 == 0){
        //if it is even then add it to the evenSum
        evenSum += firstNum;
}
这将防止重复添加您还需要的偶数和中的第一个数字

if (num > evenMax) {
    if (num % 2 == 0 ) {
        evenMax = num;
    }
}
或者,或者

if (num > evenMax && num % 2 == 0) {
    evenMax = num;
}

在您的场景中,
firstNum
是2,因此它后面的每个数字在技术上都更大,因此(理论上)您将不会得到在第一个数字之后输入的最大偶数。

或者将for循环内的第一个if条件向上移动(for循环外) 或在处理之前将所有用户输入存储在数据结构(即数组)中。
将它们存储在数组中可以更容易地操作数据

您在做一些非常奇怪的事情,第一次输入一个数字时,它被视为特殊的。这导致输入的第一个偶数(本例中为2)被多次添加到总数中

将所有输入放在同一个循环中,这样您就可以平等地对待所有内容:

public static void evenSum(){
    //prompt the user to enter the amount of integers
    Scanner console = new Scanner(System.in);

    System.out.print("how many integers? ");
    int numbers = console.nextInt();

    int evenSum = 0;
    int evenMax = 0;

    //for loop for the number of times to ask user to input numbers
    for (int i = 0; i < numbers; i++) {
        //input new number
        System.out.print("next integer? ");
        int num = console.nextInt();

        //check to see if the number is even. if it is not even, 
        //we don't care about it at all and just go to the next one
        if (num % 2 == 0){
            //add it to the sum
            evenSum += num;

            //if it's larger than the maximum, set the new maximum
            if (num > evenMax) {
                evenMax = num;
            }
        }
    }
    System.out.println("even sum = " +evenSum);
    System.out.println("even max = " +evenMax);
}
公共静态void evenSum(){
//提示用户输入整数的数量
扫描仪控制台=新扫描仪(System.in);
System.out.print(“多少个整数?”);
int numbers=console.nextInt();
int evenSum=0;
int-evenMax=0;
//for循环要求用户输入数字的次数
对于(int i=0;ievenMax){
evenMax=num;
}
}
}
System.out.println(“偶数和=”+evenSum);
System.out.println(“偶数max=“+evenMax”);
}
如您所见,此代码也只检查一个数字是否为偶数。无需在每次使用时持续检查
num
是否为偶数:其值在循环单次运行期间没有变化。

工作代码:-

    Scanner console = new Scanner(System.in);
    int numbers =0, firstNum =0, num =0 ;        
    System.out.print("how many integers? ");
    numbers = console.nextInt();
    System.out.print("next integer? ");
    firstNum = console.nextInt();
    int evenMax = 0;
    int evenSum = 0;

    if(firstNum%2==0)
    {
    evenSum = firstNum;
    evenMax = firstNum;
    }


    for (int i = 1; i < numbers; i++) {
        System.out.print("next integer? ");
        num = console.nextInt();



    if (num % 2 == 0) {
//don't add firstNum multiple times to the evenSum, earlier it was added every time you entered an even number 
                evenSum += num;

//check if the number you entered, i.e. num greater than the already existing greatest number i.e. evenMax and if so update it
                evenMax = num > evenMax: num?evenMax;
            }
        }
        System.out.println("even sum = " +evenSum);
        System.out.println("even max = " +evenMax);
}
扫描仪控制台=新扫描仪(System.in);
整数=0,firstNum=0,num=0;
System.out.print(“多少个整数?”);
numbers=console.nextInt();
System.out.print(“下一个整数?”);
firstNum=console.nextInt();
int-evenMax=0;
int evenSum=0;
如果(firstNum%2==0)
{
evenSum=firstNum;
evenMax=firstNum;
}
对于(int i=1;ievenMax:num?evenMax;
}
}
System.out.println(“偶数和=”+evenSum);
System.out.println(“偶数max=“+evenMax”);
}
希望这有帮助。代码中有三个主要问题:-

  • 每次输入偶数时,firstNum(如果是偶数)将被添加到总和中。i、 e.如果第一个数字是4,循环运行10次,遇到6个偶数,那么与偶数一起,4也会被添加6次。如果你想用它作为一个特殊的数字,并分别得到它的值,那么你必须在循环之前把它加到和中

  • 您应该将每个新偶数与以前的最大偶数进行比较,从而设置evenMax的值。您将它们与firstNum进行比较,因此如果第一个数字是2,而最后一个偶数大于2,那么它将被设置为evenMax的值。将每个偶数与当前最大偶数进行比较,即evenMax的当前值

  • 您不会检查第一个数字是否为偶数,并将其分配给偶数最大值。因此,如果它是999999,则仍然会被分配,但它不是偶数


  • 请检查答案是否正确,如果您觉得有用,请进行投票。

    在for循环中,如果
    firstNum
    为偶数,则在每次迭代时将
    firstNum
    添加到
    evenNum
    。将
    if(firstNum%2==0){evenSum+=firstNum;}
    移动到循环之外。要更快地获得更好的帮助,请发布一个。关注“short”之后的部分。为什么对第一个值的处理如此不同?我不认为有任何理由处理第一个值与后面的值有任何不同。我注意到这几乎都是正确的,除了evenSum+=firstNum需要是evenSum+=num。谢谢!看来我留错线了。很好的捕获,编辑修复。“在foor循环内部向上(for循环外部)”?我不知道这是什么意思。我的意思是将for循环中的第一个if条件移动到for循环之外。是不是太难理解,先生?我想那个给我答案的人说得很清楚,Lysee,我还是不能100%地说出你在说什么。在发布答案时,语法、标点符号和清晰度非常重要。
        Scanner console = new Scanner(System.in);
        int numbers =0, firstNum =0, num =0 ;        
        System.out.print("how many integers? ");
        numbers = console.nextInt();
        System.out.print("next integer? ");
        firstNum = console.nextInt();
        int evenMax = 0;
        int evenSum = 0;
    
        if(firstNum%2==0)
        {
        evenSum = firstNum;
        evenMax = firstNum;
        }
    
    
        for (int i = 1; i < numbers; i++) {
            System.out.print("next integer? ");
            num = console.nextInt();
    
    
    
        if (num % 2 == 0) {
    //don't add firstNum multiple times to the evenSum, earlier it was added every time you entered an even number 
                    evenSum += num;
    
    //check if the number you entered, i.e. num greater than the already existing greatest number i.e. evenMax and if so update it
                    evenMax = num > evenMax: num?evenMax;
                }
            }
            System.out.println("even sum = " +evenSum);
            System.out.println("even max = " +evenMax);
    }