2016-02-15 45 views
0

我需要一個數組,該數組從用戶的整數直到輸入「0」;然後打印平均值,最大值和最小值。我寫了一個包含700個元素的數組,並且它打破了。當我輸入0時,一切正常。問題是當我輸入0時,它將0作爲一個元素。我以某種方式解決了這個問題,所以它可以正確計算出平均值,但它仍然需要從某個地方得到0。例如,我輸入8,然後3,然後0,輸出的平均值是4.000000,最大的一個是5,最小的一個是0,但最小的應該是3. 我想這是因爲剩下的697元素被認爲是0.使用掃描儀從陣列中刪除所有的零

我發現了很多這個問題的答案,但我想解決它而不復制數組或創建一個新的。有沒有什麼我可以做,以解決這個問題,而無需添加一個數組或另一個循環或什麼?就像一條線意味着'輸入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);` 
    } 
} 
+1

您輸入8,3和0,但它說:「最大的一個是5」?這是另一個問題。 –

回答

1

最小/最大的問題都被初始化爲數組[0],這意味着兩者都被初始化爲'0',因此最小檢查將始終保持爲0,因爲它低於您輸入的任何值。您還需要刪除其他條件。試試這個

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

然後在循環內改變檢查以

if(array[i]>max) 
    max = array[i]; 

    if(array[i]<min) 
    min = array[i]; 
+0

溝通'else'的好主意。一個數字可能是最大(直到現在)_AND_分鐘(直到現在)。 –

+0

謝謝!那就是訣竅! –

1

您可以使用range()

double sum = IntStream.of(array).range(0, i).sum(); 
double Ave = sum/(i-1); 

這樣,你來數只有那些真正由用戶輸入並留下「假」 0你的一筆數字。

+0

@ ErickG.Hagstrom是的,看起來你是對的。 – sphinks