我需要一个从用户获取整数的数组,直到' 0'进入;然后它打印平均值,最大值和最小值。我写了一个包含700个元素的数组,它会中断。当我输入0时一切正常。问题是当我输入0时,它将0作为元素。我解决了这个问题,所以它可以正确计算平均值,但它仍然需要从某个地方获得0。例如,我输入8然后是3然后输入0,输出的平均值是4.000000,最大值是5,最小值是0,但最小值应该是3。 我猜是因为其余的697个元素被认为是0。
我找到了很多这个问题的答案,但我想解决它而不复制数组或创建新数组。我有什么办法可以解决这个问题而不添加数组或其他for循环或其他东西吗?就像一行意味着,当输入0时,删除所有剩余的元素并且不要将它们用于任何事情'?
import java.util.Scanner;
import java.util.stream.IntStream;
public class PlayingWithNumbers2 {
private static Scanner input;
public static void main(String[] args) {
input = new Scanner(System.in);
int[] array = new int[700];
System.out.println("Enter numbers enter 0 to end");
int i;
int max = array[0];
int min = array[0];
int a = array[0];
for (i = 0; i < array.length; i++) {
a=input.nextInt();
if(a==0){
break;
}
array[i] = a;
if(array[i]>max)
max = array[i];
else if(array[i]<min)
min = array[i];
}
double sum = IntStream.of(array).sum();
double Ave = sum/i;
System.out.printf(" The Average is %f \n the biggest one is %d \n the smallest one is %d", Ave, max, min);`
}
}
答案 0 :(得分:1)
您可以使用range():
double sum = IntStream.of(array).range(0, i).sum();
double Ave = sum/(i-1);
通过这种方式,您将只计算用户真正输入的数字,并在您的总和中留下“假”0。
答案 1 :(得分:1)
min / max的问题都被初始化为array [0],这意味着两者都被初始化为'0',因此min check将始终保持为0,因为它低于你输入的任何值。您还需要删除else条件。试试这个
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
然后在循环内部将检查更改为
if(array[i]>max)
max = array[i];
if(array[i]<min)
min = array[i];