【发布时间】:2021-09-27 05:38:01
【问题描述】:
基本上每当我在我的 java IDE (Eclipse) 中按 Run 时,它都会输出:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 36 out of bounds for length 36
at javax.media.j3d.GeometryArrayRetained.setCoordinate(GeometryArrayRetained.java:3634)
at javax.media.j3d.GeometryArray.setCoordinate(GeometryArray.java:1336)
at Main.Shapes.Square.Make(Square.java:38)
at Main.Second.<init>(Second.java:24)
at Main.Main.main(Main.java:7)
它指出的类叫做 Square 这是它包含的内容:
package Main.Shapes;
import javax.media.j3d.Node;
import javax.media.j3d.QuadArray;
import javax.media.j3d.Shape3D;
import javax.vecmath.Point3f;
public class Square {
Node shape;
public Square() {
}
public Node Make(float Size) {
QuadArray polygon1 = new QuadArray (12, QuadArray.COORDINATES);
//Front
polygon1.setCoordinate(0, new Point3f (0f, 0f, 0f));
polygon1.setCoordinate(1, new Point3f (Size, 0f, 0f));
polygon1.setCoordinate(2, new Point3f (Size, Size, 0f));
polygon1.setCoordinate(3, new Point3f (0f, Size, 0f));
//Back
polygon1.setCoordinate(4, new Point3f (0f, 0f, -Size));
polygon1.setCoordinate(5, new Point3f (Size, 0f, -Size));
polygon1.setCoordinate(6, new Point3f (Size, Size, -Size));
polygon1.setCoordinate(7, new Point3f (0f, Size, -Size));
//Right
polygon1.setCoordinate(8, new Point3f (Size, 0f, 0f));
polygon1.setCoordinate(9, new Point3f (Size, Size, 0f));
polygon1.setCoordinate(10, new Point3f(Size, Size, -Size));
polygon1.setCoordinate(11, new Point3f(Size, 0f, -Size));
//left
polygon1.setCoordinate(11, new Point3f (0f, 0f, 0f));
polygon1.setCoordinate(12, new Point3f (0f, Size, 0f));
polygon1.setCoordinate(13, new Point3f(0f, Size, -Size));
polygon1.setCoordinate(14, new Point3f(0f, 0f, -Size));
shape = new Shape3D(polygon1);
return shape;
}
}
它指出的行是:
polygon1.setCoordinate(12, new Point3f (0f, Size, 0f));
polygon1.setCoordinate(13, new Point3f(0f, Size, -Size));
polygon1.setCoordinate(14, new Point3f(0f, 0f, -Size));
删除后程序运行良好,但我无法删除它们,因为它们用于创建立方体的面。
有人有什么想法吗?
【问题讨论】:
-
Java 索引是基于 0 的。如果您的 Array 的大小为 36,那么索引是从 0 - 35。也许因为您使用的是 3D API,索引应该在 0 - 11 之间?
-
您的
QuadArray的大小显然是 12(即索引 0-11)。但是你设置了 12+。 -
非常感谢@TimHunter!我已经很久没有玩过这个项目了,所以我不太了解我在做什么,再次感谢您!
-
还可能需要仔细检查最后一组 4 点,您将索引 11 设置了两次。
标签: java arrays 3d polygon java-3d