index out of bounds exception in ArrayList
Hier ist die Fehlermeldung die ich bekomme:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at pie.chart.explorer.alpha.ShowPieChart.<init>(ShowPieChart.java:28)
at pie.chart.explorer.alpha.PieChartMain.jButton2ActionPerformed(PieChartMain.java:101)
at pie.chart.explorer.alpha.PieChartMain.access$100(PieChartMain.java:22)
at pie.chart.explorer.alpha.PieChartMain$2.actionPerformed(PieChartMain.java:63)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
BUILD SUCCESSFUL (total time: 14 seconds)
Und hier ist der code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pie.chart.explorer.alpha;
import java.awt.Color;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
/**
*
* @author Andrew
*/
public class ShowPieChart extends JFrame {
PiePanel pieChart;
public ShowPieChart(ArrayList<Float> val, ArrayList<Color> col) {
super("Pie Chart");
int index = 1;
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
FlowLayout flow = new FlowLayout();
pieChart = new PiePanel(val.size());
for(Iterator<Float> i = val.iterator(); i.hasNext(); ) {
pieChart.addSlice(col.get(index), val.get(index));
index++;
}
setLayout(flow);
add(pieChart);
setVisible(true);
}
}
Ich versuchte viele Dinge, um dieses problem zu beheben, aber ich kann nicht sagen, warum ich noch immer eine IndexOutOfBoundsException. Zu den besten meines Wissens, ich bin mir ziemlich sicher, dass diese korrekt ist! Können Sie mir helfen?
Sie versucht, die Einstellung der index 0 statt 1?
+1 Auch angegeben werden, in Frage. 🙂
+1 Auch angegeben werden, in Frage. 🙂
InformationsquelleAutor Andrew delgadillo | 2011-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Index Initialisierung werden sollte:
Da die Werte des index liegen zwischen 0 und
lenght-1
InformationsquelleAutor Jiri Kriz
Kleinste änderung, dass Sie den code ausführen, ohne Ausnahmen ist, wie andere schon hervorgehoben haben, die Einstellung
index
bei0
. Aber ich würde auch komplett neu schreiben Ihrefor
- Schleife, was ich denke, ist ein besserer Programmierstil.Brauchen Sie nicht zu verwenden
Iterator
, da Sie niemals den Zugang in die Innenseite desfor
Schleife. Besser verwenden Sie einen numerischen index statt, die Sie sich vorstellen können, innerhalb derfor
definition und haben es automatisch inkrementiert bei jedem Durchlauf durch die Schleife.ArrayList
- Instanzen als Parameter, die Sie möglicherweise ändern möchten Ihrem Konstruktor die parameter-Typen zu sein -List<Float>
undList<Color>
.InformationsquelleAutor Giulio Piancastelli
Zusätzlich zu dem, was die anderen gesagt haben, Sie nirgends Ihre iterator-Inkrement:
Müssen Sie Folgendes tun, sonst wird diese Schleife wird nie beendet.
Aber es ist nicht klar, was Sie brauchen, diesen iterator für sowieso.
InformationsquelleAutor Konrad Rudolph
Die Ausnahme ist, zeigt, dass Sie versuchen, Zugriff auf index 2, aber die Liste ist nur von der Größe 2. Initialisieren Sie Ihre index-variable auf 0, wird als Liste von Indizes (wie array-Indizes) beginnen mit 0 und läuft bis
size()-1
.InformationsquelleAutor mcgarveymr
index
sollten Sie die variable start bei 0. Wenn die Größe des Arrays ist n dann ist es der index beginnt aus 0 zu n-1.InformationsquelleAutor Mahesh
index werden sollte, initialisiert mit 0.
InformationsquelleAutor Eternal_Light