2016-03-10 18 views
-5

我的老師建議使用ArrayList,這是我第一次使用它。我不斷收到ArrayList OutofBounds的ang錯誤。我得到這個想法是空的,但我已經添加到ArrayList。也許它不能添加,我卡住了。 T^T我是使用ArrayLists的新手。數組越界,數組似乎是空的,但已經添加了字符串到它已經

for(; pizza.i<3;pizza.i++){ 
     if(jComboBox5.getSelectedIndex()==pizza.i){ 
      pizza = new Pepperoni(pizza); 
      pizza.count(); 
      //pizza.toppings.add(""+i+" Pepperoni"); 
      //pizza.toppingctr++; 
      System.out.println(pizza.i+"Pepperoni"+(++pizza.toppingctr)); 

     } 
     if(jComboBox6.getSelectedIndex()==pizza.i){ 
      pizza = new Mushroom(pizza); 
      pizza.count(); 

      System.out.println(pizza.i+"Mu"+(++pizza.toppingctr)); 
     } ........ 
}for(int i=0; i<pizza.toppingctr;i++){ 
     System.out.println(pizza.toppings.get(i)); 
    } 

System.out.println和我工作應該如何工作。我認爲問題出現在pizza.count(在Pepperoni,Mushroom等中找到),我實際上在我的ArrayList中添加了字符串。

public int count(){ 
     pizza.toppings.add(""+pizza.i+" Pepperoni"); 
     return (pizza.toppingctr+1); 
    } 

辣(和其他)延伸到PizzaDecorator,和PizzaDecorator延伸到比薩,其中數組列表被初始化。

ArrayList<String> toppings =new ArrayList<String>(); 

更新:

Exception in thread "AWT-EventQueue-0"  java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
at java.util.ArrayList.rangeCheck(ArrayList.java:635) 
at java.util.ArrayList.get(ArrayList.java:411) 
at pizzabasedresto.PizzaPanel.jButton1ActionPerformed(PizzaPanel.java:832) 
at pizzabasedresto.PizzaPanel.access$2300(PizzaPanel.java:18) 
at pizzabasedresto.PizzaPanel$24.actionPerformed(PizzaPanel.java:422) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6516) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6281) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4872) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4698) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4698) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747) 
at java.awt.EventQueue.access$300(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:706) 
at java.awt.EventQueue$3.run(EventQueue.java:704) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:720) 
at java.awt.EventQueue$4.run(EventQueue.java:718) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:717) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java: 

堆棧跟蹤不顯示它是什麼線,但是當我刪除

for(int i=0; i<pizza.toppingctr;i++){ 
     System.out.println(pizza.toppings.get(i)); 
    } 

異常消失了。所以引發異常的說法是:

+4

請發佈完整的堆棧跟蹤(格式化爲代碼)並在代碼中標識拋出異常的語句。 –

+0

請[編輯]您的文章,並添加完整的堆棧跟蹤(格式爲代碼)。然後在你的代碼中找到堆棧跟蹤中提到的語句(按行號),並告訴我們是哪個語句。 –

回答

0

首先,這應該可以解決問題。如果你使用ArrayList,你應該檢查它的文檔。當你想通過一個簡單的數組,你使用「nameOfArray.length」,對吧?那麼,ArrayList具有「.size()」方法,bascialy具有相同的用途。 所以,你的循環會更好這樣:

for(int i=0; i<pizza.toppings.size();i++){ 
    System.out.println(pizza.toppings.get(i)); 
} 

這樣你肯定你將永遠不會離開你的數組的長度。

當然現在你的價值仍然存在問題。而且很難說出它的原因有兩個:

  1. 我們想念你的代碼(比如構造函數)

  2. 的重要組成部分由於pizza.toppingctr是公開的,不應該。

你最好在count()方法中增加它,並讓它私有。實際上,如果你使用「.size()」方法,你根本不需要它。

相關問題