Ich habe die folgende Funktion in einem großen Projekt:Java seltsam unerwartet IndexOutOfBounds
private void evalLinear(float w1, float I, int axis) {
try{
for (i = 0; i < numPoints; i++) {
wv[axis][i] = wrr1[axis] - W * x[i]/L;
wm[axis][i] = (float) (wmm1[axis] + wrr1[axis] * x[i] - 0.5 * W * x[i] * x[i]/L);
wy[axis][i] = (float) (1./(6. * E * I) * (wrr1[axis]* Math.pow(x[i], 3.) - 3. * -wmm1[axis] * x[i] * x[i] - W/4. * Math.pow(x[i], 4)/L));
wd[axis][i] = (float) (1./(6. * E * I) * (wrr1[axis] * 3 * Math.pow(x[i], 2.) - 6. * -wmm1[axis] * x[i] - W/4. * 4 * Math.pow(x[i], 3.)/L));
}
}catch (IndexOutOfBoundsException e) {
p.println("numPoints="+numPoints);
p.println("i="+i+", IndexOutOfBoundsException: " + e.getMessage());
}
}
Es lief zweimal und führt den folgenden Fehler:
numPoints=7
i=2IndexOutOfBoundsException: 7
numPoints=7
i=7IndexOutOfBoundsException: 7
ich nicht in erster Linie verstehen Wie kann ich ein IndexOutOfBounds
bekommen, wenn i=2
numPoints=7
ist, und dann kann ich nicht verstehen, wie i<numPoints
Wert 7
nehmen kann.
EDIT
Dies ist die komplette Stacktrace
axis:0, wy.length:2
i:7, wy[axis].length:7
axis:0, wy.length:2
i:7, wy[axis].length:7
numPoints=7
i=7, IndexOutOfBoundsException: 7
java.lang.ArrayIndexOutOfBoundsException: 7
at BeamCalc.Element.evalLinear(Element.java:441)
at BeamCalc.Element.evalWeight(Element.java:345)
at BeamCalc.LoadInterface$5.actionPerformed(LoadInterface.java:137)
at javax.swing.JTextField.fireActionPerformed(JTextField.java:492)
at javax.swing.JTextField.postActionEvent(JTextField.java:705)
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:820)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1639)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2851)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2886)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2814)
at java.awt.Component.processEvent(Component.java:6066)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4652)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
at java.awt.Component.dispatchEventImpl(Component.java:4524)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:617)
at java.awt.EventQueue$2.run(EventQueue.java:615)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
was ist numpoints? ein Array eine Liste? Ich denke, du verpasst .length oder .size in deiner for-Schleife in der Frage. –
Sorry numPoints ist ein Klassenattribut (Integer), sein Wert ist auf 7 festgelegt und ich habe es bis zum Ende verfolgt, es ist immer 7 – fartagaintuxedo
Fügen Sie 'e.printStackTrace();' zum catch-Block hinzu, um herauszufinden, welche Zeile verursacht Ausnahme. – Evgeny