0

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

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

7 回答 7

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

将 min 和 max 移出 for 循环。

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

如果块的最小值和最大值应该相反。

平均值应计算为:

    average = sum / num.length;

注意由于整数而被截断的平均值

于 2013-07-11T16:25:22.523 回答
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
于 2013-07-11T16:27:44.753 回答
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));

另外,如您所愿,我用双打替换了整数 :)

于 2013-07-11T16:30:14.333 回答
1

留在这里的错误是:

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

此代码必须在 for{} 循环之外。

于 2013-07-11T16:27:14.133 回答
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}));
于 2013-07-11T17:26:15.943 回答
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.将最小值和最大值移到for循环之外

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

于 2013-07-11T16:26:28.880 回答
0

您应该在循环之前声明 min 和 max 变量。如果您在第一个循环 (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);
于 2013-07-11T16:29:03.543 回答