【问题标题】:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 36 out of bounds for length 36 for no reason线程“main”java.lang.ArrayIndexOutOfBoundsException 中的异常:索引 36 无故超出长度 36 的范围
【发布时间】: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


【解决方案1】:

这是因为几乎所有编程语言都从 0 开始计数。所以最后一个索引是 Size-1。

【讨论】:

    【解决方案2】:

    感谢帖子中的@TimHunter s cmets,问题已得到解决

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多