在Java中从数组中查找最小值

时间:2019-07-10 18:39:47

标签: java arrays java.util.scanner min array-sum

我正在尝试从数组中的用户输入获取总和,平均值,最大值和最小值。总和,平均值和最大值给出正确的输出。但是最小值无法发挥作用。我在哪里做错了,请有人帮我找出来。并且请不要为这个基本问题而烦恼。

import java.util.Scanner;

public class minMaxSumAverage {
    public static void main(String args[]) {
        int n, sum = 0, max, min;
        double average = 0;

        Scanner s = new Scanner(System.in);
        System.out.println("Enter elements you want to input in array: ");
        n = s.nextInt();
        int a[] = new int[n];
        max = a[0];
        min = a[0];
        System.out.println("Enter all the elements:");
        for (int i = 0; i < n; i++) {
            a[i] = s.nextInt();
            sum += a[i];
            average = (double) sum/a.length;
            if (a[i] > max) {
                max = a[i];
            }
            if (a[i] < min) {
                min = a[i];
            }
        }
        System.out.println("Sum is: " + sum);
        System.out.println("Average is: " + average);
        System.out.println("Max is: " + max);
        System.out.println("Min is: " + min);
    }
}

输出:

Enter elements you want to input in array: 
5
Enter all the elements:
25
5
10
6
4
Sum is: 50
Average is: 10.0
Max is: 25
Min is: 0

最小值应为4。

6 个答案:

答案 0 :(得分:1)

Java-8 中,您可以使用流单行完成此操作:

int[] a = new int[] { 20,11,2,3,4,7,8,90 };
int min = Arrays.stream(a).min().getAsInt();

要获取最大元素,只需将.min()替换为.max()


求和:Arrays.stream(a).mapToInt(Integer::intValue).sum();

答案 1 :(得分:1)

我已经更新了您的代码。请检查以下代码以从所有元素列表中获取最小值。

输入:

在数组中输入要输入的元素:

5

输入所有元素:

25

5

10

6

4

输出:

总和是:50

平均为:10.0

最大为:25

最小值是:4

        Scanner scan = null;
        try {
            int n, sum = 0, max, min;
            double average = 0;
            scan = new Scanner(System.in);
            System.out.println("Enter elements you want to input in array: ");
            n = scan.nextInt();
            int a[] = new int[n];
            max = a[0];
            System.out.println("Enter all the elements:");
            for (int i = 0; i < n; i++) {
                a[i] = scan.nextInt();
                sum += a[i];
                average = (double) sum/a.length;
                if (a[i] > max) {
                    max = a[i];
                }
                /**
                // from here remove logic for get min value.
                if (a[i] < min) {
                   min = a[i];
                }
                **/
            }
            min = a[0];
            for(int i=0;i<a.length;i++){
                if(a[i] < min){
                  min = a[i];
                }
              }
            System.out.println("Sum is: " + sum);
            System.out.println("Average is: " + average);
            System.out.println("Max is: " + max);
            System.out.println("Min is: " + min);
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }finally{
            scan.close();
        }

答案 2 :(得分:0)

因为min初始化为0。 在循环中,您只需询问您当前的数字是否小于0。

再试一次,将数组的第一个值指定为min。

然后它应该工作。

答案 3 :(得分:0)

 int a[] = new int[n];
 max = a[0];
 min = a[0];

您已创建一个空数组a。 max和min都被初始化为0。这对于max来说很好用,但是可以为您带来min的结果,因为在您创建的数组中,没有什么比零小。

要解决此问题,请在数组中填充值(例如

)后,将min = a[0];行添加到for循环中
for (int i = 0; i < n; i++) {
            a[i] = s.nextInt();
            sum += a[i];
            average = (double) sum/a.length;
            min = a[0];
            //if-statements here

然后,min = a[0]将不再为零,而是已填充数组的第一个值。

答案 4 :(得分:0)

作为替代方案,您可能需要考虑使用Stream ...

    public static void main(String args[]) {
    Scanner s = new Scanner(System.in);
    System.out.println("Enter count elements you want to input in array: ");
    int n = s.nextInt();
    int a[] = new int[n];
    System.out.println("Enter all the elements:");
    for (int i = 0; i < n; i++) {
        a[i] = s.nextInt();
    }
    s.close();

    IntSummaryStatistics iss = Arrays.stream(a).summaryStatistics();

    System.out.println("Sum is: " + iss.getSum());
    System.out.println("Average is: " + iss.getSum()/iss.getCount());
    System.out.println("Max is: " + iss.getMax());
    System.out.println("Min is: " + iss.getMin());
}

答案 5 :(得分:0)

有关最小,最大,总和,平均功能,请参考以下代码:

List<Integer> intList= Arrays.asList(70, 80, 10, 20, 40, 50);
    Integer ans=0;
    int sum1= intList.stream().reduce(ans, (x,y) -> x+y);

    System.out.println(sum1);

    int sum2= intList.stream().reduce(ans, Integer::sum);
    System.out.println(sum2);
    int max= intList.stream().max(Integer::compare).get();

    System.out.println(max);

    int min= intList.stream().min(Integer::compare).get();

    System.out.println(min);

    Double avg= intList.stream().collect(Collectors.averagingInt(x-> x));

    System.out.println(avg);