2015-09-19 54 views
1

對於我的問題,我不得不編寫一個方法,將採取用戶輸入並創建一個對象數組。但是可以創建任意數量的對象。所以數組大小是100,但只有2個數組元素被填充。現在,當我使用我的getAverage方法時,在經過存儲的對象後,我得到一個空點異常。Java:我將如何迭代未達到其最大大小的數組。

public class Item{ 
public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter the number of objects to input in the array"); 
    int numOfEntries = input.nextInt(); 

    Item[] itemArray = new Item[100]; 
    Item.input(itemArray, numOfEntries); 
    System.out.println(Item.getAverage(itemArray)); 
    //Item.input(itemArray); 
} 
public static void input(Item[] arr) { 
    Scanner input = new Scanner(System.in); 
    double pricesAdded = 0; 
    double average = 0; 
    double numofEntries = 0; 
    for (int i = 0; i < arr.length; i++) 
    { 
     System.out.println("Enter item"); 
     String item = input.next(); 

     System.out.println("price"); 
     double price = input.nextDouble(); 

     if (price == -1) break; 

     arr[i] = new Item(item, price); 
     numOfItems++; 
    } 

    for(int j = 0; j < numofEntries; j++) { 
     if(arr[j].getName().equals("peas") || arr[j].getName().equals("Peas")) { 
      for(int k = 0; k < numOfItems; k++) { 
       pricesAdded = pricesAdded + arr[k].getPrice(); 
      } 
      average = pricesAdded/numofEntries; 
      break; 
     } 
    } 

    if(average == 0) System.out.println("No average output " + average); 
     else System.out.println("The average is " + average); 



    for (int i = 0; i < numofEntries; i++) 
     System.out.println(arr[i].toString()); 
} 

public static double getAverage(Item[] itemArr) { 
    double pricesAdded = 0; 
    double average = 0; 
    for(int i = 0; i < itemArr.length; i++) { 
     if(itemArr[i].getName().equals("peas") || itemArr[i].getName().equals("Peas")) { 
      for(int k = 0; k < itemArr.length; k++) { 
       if (itemArr[k].getPrice() == 0.0) break; 
       pricesAdded = pricesAdded + itemArr[k].getPrice(); 

      } 
      average = pricesAdded/itemArr.length; 
      break; 
     } 
    } 
    return average; 
} 
+0

保留一個櫃檯! – ZhongYu

+0

保留一個櫃檯;使用定點值;創建一個新的數組+1長度(uhg複雜度,但它是世界「工作」);或者,我的建議,使用列表並保持簡單。 – user2864740

回答

3

只需添加一個空檢查:

if (arr[j] != null) { 
// your logic 
} 

更好的方法是使用數據結構像ArrayList,因爲它們可以隨着添加元素而增長。

0

簡單,使用前值只是檢查空:

for(int j = 0; j < numofEntries; j++) { 
    if(arr[j] == null){ 
     continue; //break? if you hit one null, can you gurantee everything after is null? 
    } 
} 
2

我不確定爲什麼別人沒有注意到,但這段代碼有嚴重的問題。

public static void input(Item[] arr) { 
    Scanner input = new Scanner(System.in); 
    double pricesAdded = 0; 
    double average = 0; 
    double numofEntries = 0;//initialized to 0 and never changes 
    for (int i = 0; i < arr.length; i++) 
    { 
     System.out.println("Enter item"); 
     String item = input.next(); 

     System.out.println("price"); 
     double price = input.nextDouble(); 

     if (price == -1) break; 

     arr[i] = new Item(item, price); 
     numOfItems++;//no declaration found 
    } 

    for(int j = 0; j < numofEntries; j++) { 
     if(arr[j].getName().equals("peas") || arr[j].getName().equals("Peas")) { 
      for(int k = 0; k < numOfItems; k++) { 
       pricesAdded = pricesAdded + arr[k].getPrice(); 
      } 
      average = pricesAdded/numofEntries;//price added divided by 0    
      break; 
     } 
    } 

您可以修復這些問題並使用全局變量來保持計數。

public class Item{ 

    static int numOfEntries;//global variable 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter the number of objects to input in the array"); 
     numOfEntries = input.nextInt();//initialize the global variable 

     Item[] itemArray = new Item[100]; 
     Item.input(itemArray, numOfEntries); 
     System.out.println(Item.getAverage(itemArray)); 
     //Item.input(itemArray); 
    } 

,當你循環,使用

for(int j = 0; j < numOfEntries; j++) 

因爲用戶明確進入項目的數量,這將解決您的問題。