2016-08-14 23 views
-1
public class ItemTable { 
private final Integer[] idT = { 1,2,3,4,5,6,7,8,9,10 }; 
private final Integer[] quantityT = { 1,2,3,4,5,6,7,8,9,10 }; 

private final String[] barcodeT = { "001" , "002", "003", "004", "005",null,null,null,null,null, }; 
private final String[] nameT = { "Milk", "Bread", "Wine", "Butter", "Potato", "Sweet Potato","Ginger" ,"Avacado", "Cucumber"}; 
private final double[] perWeightT = {0.2,0.4,0.1,0.2,0.1,2,1,0.5,0,0,0}; 
private final double[] perPriceT = { 1.50, 2.45, 12.95, 4.75, 2, 3.5, 12, 4, 3, 1 }; 

private final ArrayList<ItemType> table = new ArrayList<>(); 
public final ArrayList<View> lookUpItem = new ArrayList<>(); 

public ItemTable() 
{ 
    for(int i = 0; i< idT.length; i++) 
    { 
     if(barcodeT[i]!=null) 
      table.add(new ItemTypeB (idT[i], nameT[i], perPriceT[i],perWeightT[i],barcodeT[i])); 
     else 
     { 
      if(perWeightT[i]!=0) 
      {  
       table.add(new ItemTypeW(idT[i], nameT[i], perPriceT[i],perWeightT[i],perWeightT[i])); 
       lookUpItem.add(new View(idT[i], nameT[i], "w")); 
      } 
      if(perWeightT[i]==0) 
      { 
       table.add(new ItemTypeC(idT[i], nameT[i], perPriceT[i],perWeightT[i], quantityT[i])); 
       lookUpItem.add(new View(idT[i], nameT[i], "c")); 
      } 
     } 

    } 

} 

問題の領域は、コードの最後の行を中心に具体的にはtable.add(new ItemTypeC)です。スレッド "main"の例外java.lang.ArrayIndexOutOfBoundsException:9

+0

ヒントをスロー:あなたが反復され、各上の表にどのように多くの要素であり、そしてあなたは、各反復で使用しているテーブルの残りの部分にどのように多くの要素がありますか? – Pshemo

+0

あなたの質問の周りに「助けてください」という言葉を入れる必要はありません。これは特にタイトルの場合です - タイトルを有益かつ簡潔に保ってください。ありがとう! – halfer

答えて

0

あなたのアレイのうちの1つ(nameT)は、「一回限り」です。つまり、すべての配列には10個の要素がありますが、その要素は9個だけです。

実際の問題は異なる性質のものです。ここでは何か非常に間違っています。あなたのプログラムは「手続き型」のスタイルで書かれています。

意味:「一緒に」意味のあるものを構成するさまざまな要素があります。あなたの実装:それらの要素のそれぞれをそれ自身の配列に入れます。それぞれの配列から値を取り出して、 "一緒に"意味するものを "構築"します。したがって、あなたの「エンティティ」を構成するものは、5つの異なる配列内の単なるインデックスです。

オブジェクト指向のアプローチでは、抽象化を作成します。クラスのように、さまざまな性質を持つ製品; 「id」、「quantity」、「name」などのように、これはまた、2つの製品がと同じであるかどうかを簡単に把握するための合理的なequalsメソッドを作成することを可能にします。あなたがそのようなクラスを作成したとき。そのようなオブジェクトのの配列をの1つ作成します。

短いストーリー:Javaでのプログラミングは、良い抽象度を見つけて作成することです。あなたがそうしなければ...あなたはこの種の低レベルの問題で正確に走ります。

1

nameTアレイには9個の要素しかありません。それはあなたのコードを破る。

私はif(perWeightT[i]==0)あなたのコードで10を= ArrayOutofBoundエラーに

+0

あなたの最初の文は正しいですが、説明はビットオフです。 'i'は' idT.length = 10'から 'i Pshemo

関連する問題