给定填充了其所有值的矩阵,需要随机提取数据以创建随机矩阵(每个位置初始化为空值)。问题在于检查位置(在randomMatrix内)是否与null不同,如下所示:
public void randomLogic(String[][] givenMatrix){
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
int positioni = this.randInt(0, 1);
int positionj = this.randInt(0, 1);
int x = this.randInt(0, 3);
int y = this.randInt(0, 2);
/*In here lies the reported issue while checking if empty. */
while (!this.randomMatrix[x][y].isEmpty()) {
x = this.randInt(0, 3);
y = this.randInt(0, 2);
this.randomMatrix[x][y] = givenMatrix[positioni][positionj];
}
}
}
}
我还尝试了以下内容:while(this.randomMatrix[x][y] != null)
,代码会立即崩溃。所有的解决逻辑都按预期工作(因为如果我省略那部分它可以解决缺陷但是有效),唯一的问题就是验证。无论评估什么位置,它总是停止工作。
还有其他检查矩阵位置值的方法吗?
答案 0 :(得分:1)
你试图从给定的矩阵中提取随机值(因此,有些会重复)或者你想特定地随机化给定的矩阵吗?
如果是后者,我会采用不同的方法。 首先,在一个线性数组或列表中收集givenMatrix的所有值。 然后,您可以随机化此数组,并且您将留下大量行*列项,并且原始矩阵中的所有值都已随机化。
然后,您可以系统地填充新的随机矩阵,按顺序获取数组的每个元素,直到您完成新矩阵的每一行和每列。
我会选择这种方法,因为它更容易,并且会以固定的步数完成;而不是填补随机位置,因为也许你在同一个地方填2次,你必须随机化,直到你击中所有的位置。
(另外,如果你不小心重复新矩阵的值,那么你可以简单地每次选择一个随机数组的随机位置而不是取随机数组的每个元素)
答案 1 :(得分:1)
您是否将String [] [] randomMatrix声明为类级别成员变量?如果你已正确声明randomMatrix,则isEmpty()和!= null检查应该有效。