【问题标题】:Finding smallest value from array in java从java中的数组中找到最小值
【发布时间】:2019-11-20 10:35:13
【问题描述】:

我正在尝试从数组中的用户输入中获取总和、平均值、最大值和最小值。 sum、average 和 max 给出了正确的输出。但是最小值不起作用。我在哪里做错了,有人可以帮我找出来吗?

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。

【问题讨论】:

  • 当您创建一个原始数组时,例如使用int a[] = new int[n];,所有元素都设置为给定原始数组的默认值。所以这行代码创建了一个大小为 n 的 int 数组,其中所有元素都设置为零。当您在此之后立即执行 min = a[0]; 时,您将 min 初始化为 0,因此您的 min 将始终为零(除非输入负数)。解决此问题的一种简单方法是像这样初始化 min:min = Integer.MAX_VALUE;。这样,您之后输入的每个数字都保证不大于min

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


【解决方案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】:

    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();

    【讨论】:

      【解决方案3】:

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

      再次尝试将数组的第一个值指定为最小值。

      那么它应该可以工作了。

      【讨论】:

        【解决方案4】:
         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] 将不再为零,而是填充数组的第一个值。

        【讨论】:

        • 会出现问题,因为每次minif语句中发生变化,它都会在for-loop的下一次迭代中再次成为数组的第一个元素。
        【解决方案5】:

        请参阅下面的代码以了解最小值、最大值、总和、平均功能:

        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);
        

        【讨论】:

          【解决方案6】:

          作为替代方案,您可能需要考虑使用 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());
          }
          

          【讨论】:

            猜你喜欢
            • 2021-01-08
            • 2022-01-24
            • 2021-02-10
            • 2015-02-01
            • 2015-02-03
            • 2015-07-07
            • 2016-02-12
            • 1970-01-01
            相关资源
            最近更新 更多