2014-03-06 47 views
0

我有下面的代碼,它使用scanner類從文件讀取輸入並使用可比較的接口對輸入進行排序。此代碼適用於固定的數組大小,但我想要計算文件中存在的行數。嘗試獲取文件中行號的數組概念

public class ReadItemData { 

    public static void main(String[] args) throws Exception { 

     Scanner aScanner = new Scanner(new FileReader(
       "src//chapter11//Items.txt")); 

    double avg = 0; 
     double sum = 0; 
     Item[] itemArray = new Item[5]; 

      while (aScanner.hasNext()) 
     { 
       String code = aScanner.next(); 
       String sku = aScanner.next(); 
       double qty = aScanner.nextDouble(); 

      itemArray[count] = new Item(code, sku, qty); 
      System.out.println(itemArray[i]); 
     i++; 

     } 
    Arrays.sort(itemArray[i]); 
     System.out.println(); 
      for (Item it : itemArray) 
     { 
      System.out.println(it); 

      sum += qty; 
     } 
    avg = sum/5; 
    if(qty <= (avg - 10)) 
    { 
    System.out.println("Quantity is 10 less than the average quantity"); 
    } 
    } 
    } 
    class Item implements Comparable { 
    private int qty; 
    private String sku,code; 

    public Item(String code, String sku,int qty) { 
     this.code = code; 
     this.sku = sku; 
     this.qty = qty; 
    } 

    public String getCode() { 
      return code; 
    } 
    public String getSku() { 
     return sku; 
    } 
    public int getQty() { 
     return qty; 
    } 


    public int compareTo(Object o) { 
     Item i = (Item) o; 
     return (this.sku).compareTo(i.sku); 
    } 
} 

我試着聲明int變量計數,並將其傳遞給數組,但我得到ArrayIndexOutOfBoundsException異常

int count = 0; 
Item[] itemArray = new Item[count]; 

還有一個問題,我面對的是我計算循環內的總和,但我我沒有得到預期的效果

我輸入文件

PAP ENT 82 
WAR HOT 79 
TIM JUT 92 
BON BLA 76 
BON MAG 45 

數量的總和爲374,但在我的代碼中計算爲225,我無法弄清楚我在做錯的地方。

任何幫助表示讚賞。

謝謝!

回答

1

不是將這些添加到固定數組中,而是將它們添加到java list中。一旦填滿了列表,請使用listClass.size()來檢索列表的大小。

這裏的一些實施:

 List<Item> itemList = new List<Item>(); 
     while (aScanner.hasNext()) 
     { 
      String code = aScanner.next(); 
      String sku = aScanner.next(); 
      double qty = aScanner.nextDouble(); 

     itemList.add(new Item(code, sku, qty)); 
     System.out.println(itemList.get(i)); 
    i++; 

    } 

現在使用itemList.size()在任何地方以獲取多少個條目。你正在實現錯誤的順便說一句陣列。當你得到數組越界時,錯誤是由於你正在用0個位置初始化數組。

你的和不正確由於沒有得到正確的項目值:

for (Item it : itemArray) 
    { 
     System.out.println(it); 
     //You must get the iterated item quantity (I assume you don't have setters and          
     //getters 
     sum += it.qty; 
    } 
+0

我沒有其他的選擇,而不是使用數組。我可以知道我在初始化陣列時犯的錯誤嗎? – Sandy

+0

你是什麼意思,你沒有選擇?這就是'ArrayList'類的用途。 –

+0

@Sandy家庭作業? – jrowe08