从数组中获取Min和Max

时间:2013-07-11 16:19:51

标签: java

我正在尝试根据用户输入的数字构建一个数组。我已经能够计算除最小值和最大值之外的所有值。下面的代码总是提供用户输入的第一个数字作为最小值和最大值。任何有关如何修复的建议将不胜感激:

   Scanner in=new Scanner (System.in);
        int num[]=new int[5];
        int average=0;
        int i=0;
        int sum=0;

        for (i=0;i<num.length;i++) {
            System.out.println("enter a number");
            num[i]=in.nextInt();
            sum=sum+num[i];
            int min=num[0];
            int max=num[0];
            if (num[i]<min) {
            min=num[i];
            }
            if (num[i]<max) {
            max=num[i];
        }

        average=sum/6;
        System.out.println("Average="+ average);
        System.out.println("Min="+ min);
        System.out.println("Max="+ max);
        System.out.println("Sum="+ sum);

7 个答案:

答案 0 :(得分:3)

        int min=num[0];
        int max=num[0];

将最小值和最大值移出for循环。

    int min = Integer.MAX_VALUE,
        max = Integer.MIN_VALUE;

最小和最大if块应该相反。

平均值应计算为:

    average = sum / num.length;

请注意由于 ints

而被截断的平均值

答案 1 :(得分:2)

声明min和max超出循环范围。

 int min =Integer.MAX_VALUE;
 int max= Integer.MIN_VALUE;
 double average = 0D;
      for(..){

      if (num[i] > max) { // this is the condition you have to put
        max=num[i];
      }
     } 

     average=  ((double)sum/num.length);
     System.out.printf("Average is %.2f \n",average);//to print with 2 decimals

答案 2 :(得分:2)

你的代码错了。这里有一点改进:

Scanner in=new Scanner (System.in);
double num[]=new double[5];
double average=0;
int i=0;
double sum=0;

double min = Double.MAX_VALUE;
double max = Double.MIN_VALUE;

for (i=0;i<num.length;i++) {
    System.out.println("enter a number");
    num[i]=in.nextDouble();
    sum=sum+num[i];
    if (num[i]<min) {
        min=num[i];
    } else if (num[i] > max) {
        max=num[i];
    }
}

average=sum/num.length;
System.out.println(String.format("Average=%.3d", average));
System.out.println(String.format("Min=%.3d", min));
System.out.println(String.format("Max=%.3d", max));
System.out.println(String.format("Sum=%.3d", sum));

另外,我根据你的意愿用双打替换了你的投注:)

答案 3 :(得分:1)

错误留在这里是:

 int min=num[0];
 int max=num[0];

此代码必须在{}。

的循环之外

答案 4 :(得分:0)

int min,max;min=max=min[0];
      for (i=0;i<num.length;i++) {
                System.out.println("enter a number");
                num[i]=in.nextInt();
                sum=sum+num[i];
                if (num[i]<min) {
                min=num[i];
                }
                if (num[i]<max) {
                max=num[i];
            }

除此之外,您的代码还有很多其他问题

1.将min和max移动到循环外

2.使用Double / Float存储平均值,因为使用int会导致截断结果。

答案 5 :(得分:0)

您应该在循环之前声明最小和最大变量。如果您处于第一个循环(i = 0),则可以分配它。否则,你比较一下。像这样:

Scanner in=new Scanner (System.in);
    int num[]=new int[5];
    int average=0;
    int i=0;
    int sum=0;
    int min;
    int max;

    for (i=0;i<num.length;i++) {
        System.out.println("enter a number");
        num[i]=in.nextInt();
        sum=sum+num[i];
        if(i==0) {
            min=num[0];
            max=num[0];
        } else {
            if (num[i]<min) {
                min=num[i];
            }
            if (num[i]<max) {
                max=num[i];
            }
        }
    }

    average=sum/6;
    System.out.println("Average="+ average);
    System.out.println("Min="+ min);
    System.out.println("Max="+ max);
    System.out.println("Sum="+ sum);

答案 6 :(得分:0)

您可以使用排序。

List<Integer> foo = Arrays.asList(5, 6, 7);
Collections.sort(foo);
System.out.println("max=" + foo.get(foo.size()-1));
System.out.println("min=" + foo.get(0));

如果包含一些Apache库,则可以使用它们的内容,例如:

System.out.println(NumberUtils.max(new int[]{5,6,7}));