提问者:小点点

在数组列表中找出最小值、最大值、平均值和


我正在编写一个程序来从用户那里获取三个数字并将其放入数组列表中并找到总和、平均、最小和最大值。我在找到最小值时遇到问题。当我运行代码时,最小值始终为零。如何解决此问题?

    int num = 0;
    int sum = 0;
    int avg = 0;
    int min = 0;
    int max = 0;
    int i = 0;

    ArrayList<Integer> array = new ArrayList<Integer> ();

    Scanner input = new Scanner (System.in);

    for (i = 0; i < 3; ++i){

        System.out.println("Enter a number");
        num = input.nextInt();
        array.add(num);

        sum += num;

        if(num > max){
            max = num;
        }

        if(num < min){
            min = num;
        }

    }

    avg = sum / i;

    System.out.println("Sum: " + sum);
    System.out.println("Avg: " + avg);
    System.out.println("Max: " + max);
    System.out.println("Min: " + min);



 //Code Result

 //Enter a number
 // 10
 //Enter a number
 // 20
 //Enter a number
 // 30

 //Sum: 60
 //Avg: 20
 //Max: 30
 //Min: 0 <-- this is always zero

 }

共2个答案

匿名用户

早上好,肖恩。

你必须在循环之外初始化“min”值,并且必须将“min”初始化为大值,类似于“Integer.MAX_VALUE”。

无论如何,我将告诉您如何在没有循环的情况下找到一些元素:

要获取 ArrayList 的最大值,您不需要 for。可以使用集合 API 来查找它。

Collections.max(arrayList);

它返回数组列表中所有值的最大值。

要获取最小值,您在集合 API 中也有一个函数来查找它。

Collections.min(arrayList);

也会起作用。

总和和平均 你必须用循环计算,在你的程序中是可以的。

你的代码必须是这样的

int num = 0;
int sum = 0;
int avg = 0;
int min = 0;
int max = 0;
int i = 0;

ArrayList<Integer> array = new ArrayList<Integer> ();

Scanner input = new Scanner (System.in);

for (i = 0; i < 3; ++i){

    System.out.println("Enter a number");
    num = input.nextInt();
    array.add(num);

    sum += num;
}

max = Collections.max(array);
min = Collections.min(array);
avg = sum / i;

System.out.println("Sum: " + sum);
System.out.println("Avg: " + avg);
System.out.println("Max: " + max);
System.out.println("Min: " + min);

PD:你必须导入java.util.Collections;

祝你今天开心!

匿名用户

这是因为您将 min 设置为 0 并且它低于所有值。您需要将其初始化为一个大数字(例如 Integer.MAX_VALUE),然后它将起作用