【问题标题】:How to find the smallest element in an user inputted array? Why the smallest element is displayed zero?如何在用户输入的数组中找到最小的元素?为什么最小的元素显示为零?
【发布时间】:2020-09-08 15:33:45
【问题描述】:

代码显示总和、平均值和最大元素。它不显示最小的元素,因为输出始终为零。如何显示数组中最小的元素?

import java.util.Scanner;
public class Average {

    public static void main (String[] args) {
        
        Scanner input = new Scanner(System.in);
        
        System.out.println("Enter the number of elements:");
        int length = input.nextInt();
        
        int[] num = new int[length];
        System.out.println("Enter the "+ length +  " array elements:");
        int sum = 0;
         int large,small;
         large =small = num[0]; 
         
         for (int i=0; i<length;i++) {
            num[i] = input.nextInt();
            sum = sum+ num[i];
              }
         
        for (int i=0; i<length; ++i) {
            if (num[i]<small) {
                 small = num[i];
            }
              
             if(num[i]> large) {
                 large = num[i];
            }
             }
        
        double avg = sum/length;
        System.out.println("The sum is "+ sum);
        System.out.println("The average is "+ avg);
        System.out.println("The smallest element is "+ small);
        System.out.println("The largest element is "+ large);
        }
}

【问题讨论】:

  • 初始化large =small = num[0];应该在用户输入数组的值之后完成,而不是之前

标签: java arrays element


【解决方案1】:
import java.util.Scanner;

class Average {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("Enter the number of elements:");
        int length = input.nextInt();

        int[] num = new int[length];
        System.out.println("Enter the " + length + " array elements:");
        int sum = 0;
        int large, small;

        for (int i = 0; i < length; i++) {
            num[i] = input.nextInt();
            sum = sum + num[i];
        }

        large = small = num[0]; // small should be assigned after num is input
        
        for (int i = 0; i < length; ++i) {
            if (num[i] < small) {
                small = num[i];
            }

            if (num[i] > large) {
                large = num[i];
            }
        }

        double avg = sum / length;
        System.out.println("The sum is " + sum);
        System.out.println("The average is " + avg);
        System.out.println("The smallest element is " + small);
        System.out.println("The largest element is " + large);

    }
}

【讨论】:

    【解决方案2】:

    是的,这是因为默认情况下您的字段 small 等于 0。

    现在让我们一步一步看你的 if 语句

            if (num[i]<small) {
                 small = num[i];
            }
    

    数字示例:22,11,6,

    So first step is num[0] < 0, why 0 as mention before small = 0 by default
    Step two num[1] < 0, small stills stay 0
    Step Three num[2] < 0, small stills stay 0.
    

    您缺少什么,您需要在 for 循环的第一次迭代中为 small 赋值,例如:

           for (int i=0; i<length; ++i) {
                if(i == 0){
                    small = num[i];
                }
                if (num[i]<small) {
                    small = num[i];
                }
    
                if(num[i]> large) {
                    large = num[i];
                }
            }
    

    现在你的程序应该可以运行了 :)

    【讨论】:

      【解决方案3】:

      如果你使用java 8或更高版本,你可以使用Arrays的stream方法。它简化了数组的工作。 for more info

      首先将数组导入为import java.util.Arrays;

      System.out.println("The sum is " + Arrays.stream(num).sum());
      System.out.println("The average is " + Arrays.stream(num).average());
      System.out.println("The smallest element is " + Arrays.stream(num).min());
      System.out.println("The largest element is " + Arrays.stream(num).max());
      

      【讨论】:

        猜你喜欢
        • 2017-12-09
        • 2020-04-20
        • 2015-04-18
        • 2017-12-13
        • 2011-06-14
        • 2014-11-08
        • 2020-09-22
        • 2015-12-02
        • 2014-07-21
        相关资源
        最近更新 更多