使用扫描程序

时间:2016-02-15 13:48:03

标签: java arrays

我需要一个从用户获取整数的数组,直到' 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);`
    }
}

2 个答案:

答案 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];