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