我有一个字符串文本,代表推箱子游戏中的一个级别。 我有几个不同的字符,每个字符都有不同的含义。
- “#”= 墙
'$' = 玩家
'@' = 要移动的行李
- '.' = 行李必须降落的目标
我使用的是二维数组 (10x10)
例如,这是级别:
String level = "##########" + "# .#" + "# ###" + "# @ ####"
+ "# $ ####" + "# ####"
+ "##########" + "##########" + "##########" + "##########";
现在我想知道如何将该字符串转换为二维数组,以便第一个 # 将位于 [0][0] 等等...
到目前为止我已经尝试过了,但不幸的是,我认为我还没有接近解决方案。
int SPACE = 10;
for (int i = 0; i < level.length(); i++) {
char s = level.charAt(i);
for (int rij = 0; rij < SPACE; rij++) {
for (int kolom = 0; kolom < SPACE; kolom++) {
switch (s) {
case '#':
spelbord[rij][kolom] = "#";
break;
case '@':
spelbord[rij][kolom] = "@";
break;
case '$':
spelbord[rij][kolom] = "$";
break;
case '.':
spelbord[rij][kolom] = ".";
break;
}
}
}
}
最佳答案
如果我理解正确的话,你的字符串级别只是一个包含“#”、“@”、“”、“$”和“.”的 100 个字符的字符串。每个字符映射到棋盘中的一个不同元素,即 char[][] 矩阵。
当前,您的代码循环遍历字符串。在每次迭代中,您都会(错误地)迭代整个板。这是不必要的,因为您应该已经知道将字符放入板中的位置。
要解决此问题,请为字符串保留一个单独的计数器并遍历板一次。每次您将一个字符放入棋盘中时,计数器就会递增。
int counter = 0;
for (int rij = 0; rij < SPACE; rij++) {
for (int kolom = 0; kolom < SPACE; kolom ++) { //you are supposed to increment kolom here, not rij
spelbord[rij][kolom] = level.charAt(counter++); //increment counter after assignment
}
}
关于java - 如何将字符串转换为二维数组 (java)(GameBoard),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60398726/