在 Java 中使用数组查找最小值、最大值和平均值

Posted

技术标签:

【中文标题】在 Java 中使用数组查找最小值、最大值和平均值【英文标题】:Using an Array to find Minimum, Maximum, and Average in Java 【发布时间】:2020-06-17 06:37:54 【问题描述】:

在我们的编程课程介绍中,我们才刚刚开始使用 Java 编写代码,我对这个特定作业的错误之处感到困惑。目标是创建一个程序,输入存储在数组中的 15 个测试分数(值介于 1 到 100 之间)。然后使用该数组计算最小、最大和平均分数的输出(平均值必须是累加器)。

不允许使用带有 break 语句的无限循环。下面是我开始的代码以及教授的注释。

我们在 Codiva 中运行此代码,当我运行它时,没有任何内容。不知道我错过了什么。

import java.util.Scanner;

class TestScoresCalulcated 
    public static void main(String[] args) 
        /**Declarations**/
        int index = 0;
        int index2 = 0;
        int min;
        int max;
        int testScore;
        int NUM_SCORES = 15;
        int[] listOfScores = new int[NUM_SCORES];

        Scanner in = new Scanner(System.in);

        for (index = 1; index <= NUM_SCORES; index++) 
            /**TODO:create a loop and make the variable index the loop control variable**/
            System.out.println("Enter in an integer:");
            testScore = in .nextInt();
        

        min = 1;
        max = 100;

        for (index2 = 1; index2 <= NUM_SCORES; index2++) 
            if (max < listOfScores[index2]) 
                max = listOfScores[index2];
            
            System.out.println("Doing Max Calculation: " + max);
        

        for (index2 = 1; index2 <= NUM_SCORES; index2++) 
            if (min > listOfScores[index2]) 
                min = listOfScores[index2];
            
            System.out.println("Doing Min Calculation: " + min);
        

        //use the index2 as a loop variable as a index for the array. 
        /*TODO:create another loop
        //TODO:check if the element in the array less than max
          System.out.println("Doing max calulcation");
          //TODO: assign max variable
        //TODO:check if the element in the array less than min
          System.out.println("Doing min calculation");

        //consider doing accumulator calculation here to get the average.

    **/ //end of loop2

        //output the results here

    

【问题讨论】:

您的问题是什么?有什么不工作吗? 我看到的第一个问题是您没有将输入值写入数组。你可以使用testScore = in.nextInt();,但这个testScore 再也不会被使用了。将此值分配给您的数组,例如 listOfScores[index] = testScore 或直接使用 listOfScores[index] = in.nextInt() 对于初学者,您应该将捕获的每个条目存储在数组中 - 而不是 testScore。还有像 Integer.MIN_VALUE/Integer.MAX_VALUE 之类的东西,您应该使用它来播种最大/最小值占位符,以便在每次迭代时进行比较。 @JGFMK 我认为最好的方法是用 listOfScores[0] 的值初始化 min 和 max 这样,你的数字范围无关紧要。 这也可以在一个循环中完成 【参考方案1】:

您正在使用值 0 初始化索引,然后用 1 覆盖它,因此您正在从第二个值开始访问您的数组。此外,您的循环使用数组的长度作为索引 (15) 结束,这实际上是数组中不存在的第 16 个元素,您肯定会在那里遇到错误。 您需要使用

还有@Nils 所说的首先不保存数组中的值。

【讨论】:

【参考方案2】:

实际上你不需要一个数组来完成这个任务。

我准备了一份待办事项清单来解决你的任务。

    在第一个循环中,您必须填充数组(如果您确实需要数组),但您的代码只是将输入的值分配给 testScore 变量。

    检查用户条目是一种很好的编程习惯。如果用户输入一个字符串值怎么办。

    您可以在第一个循环中找到最小值和最大值。提示:初始化 min = 100;最大值 = 1;

    要查找平均值,请将输入的值累积到一个变量中,例如总计。

    在循环之外,求平均值除以NUM_SCORES

如果您需要,我会发送我的解决方案:

import java.util.InputMismatchException;
import java.util.Scanner;

class TestScoresCalulcated 
    public static void main(String[] args) 
        /** Declarations **/
        int min = 100;
        int max = 1;
        int total = 0;
        int testScore;
        int NUM_SCORES = 15;


        Scanner in = new Scanner(System.in);

        for (int i = 0; i < NUM_SCORES;) 
            try 
                System.out.println("Enter " + (i + 1) + ". value: ");
                testScore = in.nextInt();

                if (testScore < 1 || testScore > 100) 
                    throw new IllegalArgumentException();
                

                if (testScore < min) 
                    min = testScore;
                

                if (testScore > max) 
                    max = testScore;
                

                total += testScore;
                ++i;

             catch (InputMismatchException | IllegalArgumentException e) 
                System.out.println("Please enter numbers between 1 and 100\n");
                in.nextLine();
            

        

        System.out.println("\nOutput:");
        System.out.println("Min: " + min);
        System.out.println("Max: " + max);
        System.out.println("Average: " + total / NUM_SCORES);

        in.close();
    

【讨论】:

以上是关于在 Java 中使用数组查找最小值、最大值和平均值的主要内容,如果未能解决你的问题,请参考以下文章

查找整数数组的平均值

java程序,随机产生包含20个元素的数组,求出数组中的最大值,最小值和平均值

Java求解! 定义一个6行6列的二维整型数组,输出该二维数组中的每行和每列的最大值、最小值、和平均值。

使用java编写两个方法min和max在链表中查找最大值和最小值,但输入列表是整数数组

查找表中数据的最小最大值和平均值

在 Array Angular 和 Typescript 中查找最小和最大元素