数组消失了?

Arrays Disappearing?

我知道标题似乎有点奇怪,但这是我描述问题的唯一方式。

该项目正在创建一个简单的益智游戏,您必须将图块移动到位置以形成 4(图块)x 4(图块)图像。

它有几个 classes,但有问题的是 Tile Grid classes。我的思考过程是: 我将为 Tiles 创建两个 classes,一个用于 Left,一个用于 Right

(我选择 2 是因为我遇到了一个问题,即在对数组进行洗牌后,主 window 会在平铺位置显示重复的图像,即使数组本身没有重复但我推断这是因为我制作了 2 个 TileGrid classes,从而制作了 2 个大小为 16 的图标数组,它们都包含所有图像,而不是仅从这些数组中的一个中获取图标,而是从两个数组中获取图标。 另外 2 个单独的 classes 减少了匿名 类 的数量。)

那些 classes 将有两个数组 class Tile 一个用于操作,一个是 master 用于重置。

然后我遍历这些数组,将 Tile 图标设置为 MazeImage 中相应数组之一中的图标 class

MazeImage class 获取图像,将其分成 16 块并将这些块添加到图像数组和未打乱的数组中。 图像数组是可操作的数组未改组的数组用于求解机制

一旦图像被分成 16 份并存储 MazeImage class 运行 setShuffledMaster() 和 setShuffledProxy() setShuffledMaster() 将 images[] 复制到 master[] 然后打乱 master 数组,然后通过 System.copyarray 将 master 数组分成 2 部分并将部分 1-8 存储到 masterL[] 并将 8-16 存储到 masterR[]

setShuffledProxy()然后将master[]数组一分为二,将一半存入imagesL[]和imagesR[]中,这些数组将用于运算

然后我有一堆 getMethods() return 数组,但似乎这些 get 方法不起作用或正在工作,但 half/half 数组正在重置为 null

准确的错误是一个空指针异常,发生在: masterL[i].setIcon(img.getMasterL(i)); 在 TGridL class 中,但在 TGridR class

中也是同一行

这可能是我可能需要解决的最终问题之一,我可能需要解决这些问题才能使一切正常运行,但它只会让我很生气,因为我看不到 were/why 这正在发生,任何帮助都将真正节省理智。

附带说明,如果有人对如何改进这方面有任何想法,请告诉我。现在这类似于一个粗略的草稿,所以事情并不像他们应该的那样漂亮。

代码如下:

for(int i = 0; i<masterL.length; i++)
        {
            masterL[i] = new Tile(){
                public Dimension getPreferredSize() {
                      return new Dimension(80, 80);
                    //Sets Dimensions 
                   };
            };


            masterL[i].setIcon(img.getMasterL(i));
            masterL[i].setIdentifier("Tile_" + (i + 1));
            //---------------------------------------------
        }

TGridR 完全一样,只是将所有 'L' 替换为 'R',所以我不会 post,但如果您需要它,请告诉我。

public void setShuffledMaster()   //Master Tiles Left
    {
        List<Image> temp;  
        //Temp list for shuffle

        Image[] shuffled = new Image[16];  
        //array for shuffled images

        shuffled = images; 
        //Set equal to initial right after crop from editImage();

        temp = Arrays.asList(shuffled); 
        //Set temp list equal to init order

        Collections.shuffle(temp); 
        //Shuffle

        shuffled = (Image[]) temp.toArray();
        master = shuffled;
        //Change List to Array to be able to loop over it

        System.arraycopy(shuffled, 0, masterL, 0, masterL.length);
        System.arraycopy(shuffled, masterL.length, masterR, 0, masterR.length);
        //Split array into two parts




 public ImageIcon getMasterL(int i) //Get Master Left
 {
    img = new ImageIcon(masterL[i]);
    return img;
 } 

所以要点是 getMasterL 实际上并没有工作,因为显然 masterL 数组是空的,但是当我打印出 MazeImage class 创建的所有数组的内容时 none 其中有 null

如果你们需要任何其他信息或需要澄清,请告诉我。

非常感谢!

您没有初始化 MazeImage 类型的 img 对象。可能在构造函数中这样做...

img = new MazeImage(); // Or whatever constructor you need here.

此外,如果您的左右 class 是如此相似,您可以简单地使用一个基础 Tile class 并对其进行子class 以巧妙地创建两个不同的品种。