数组消失了?
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 以巧妙地创建两个不同的品种。
我知道标题似乎有点奇怪,但这是我描述问题的唯一方式。
该项目正在创建一个简单的益智游戏,您必须将图块移动到位置以形成 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 以巧妙地创建两个不同的品种。