我希望用1&0和0来制作围栏以表示地形。 1将是围栏,0将是空格。这是我的代码:
package assignment_2;
import java.util.Map;
import java.util.Scanner;
public class Fencing {
public static void main(final String[] args) {
boolean b = true;
int i;
int j;
final int[][] map = { { 0, 1, 1, 0 }, { 1, 2, 1, 1 }, { 1, 1, 3, 0 }, { 1, 4, 0, 0 } };
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (map[i][j] != 1 && map[i][j] != 0) {
b = false;
if (b == false) {
System.out.println("Map does not have the correct format");
b = true;
while (i < 4 && j < 4) {
System.out.println("--> A value of " + map[i][j] + " was found at " + i + "," + j);
i++;
j++;
}
} else {
System.out.println("The map is valid");
return;
}
}
}
}
}
}
现在,此代码滚动数组值,如果有值不是1或0,则会将它们报告给用户。如果没有错误,它应该报告&#34;地图有效&#34;。我有两个问题,第一个问题是阵列正确并且没有错误(仅由1&0; s和0&#39; s组成)它没有显示任何内容,它应该在哪里显示& #34;地图格式正确&#34;。第二个问题是更重要的问题,其中数组的底线似乎有问题。它跳过不正确的值,如4,只报告结束行,即位置3,3处的0。这是一个正确的值,因此我不确定该怎么做。其他线路没有这个问题,他们报告了正确的错误,如3和2.有没有人知道什么是错的?
答案 0 :(得分:0)
对于您的第一个问题:您将b
设置为false
,然后在下一行中询问if( b == false)
。所以那显然true
并且从不调用else块。
执行if (map[i][j] != 1 && map[i][j] != 0){
并同时使用布尔值b
是多余的。
对于第二个问题:一旦找到错误的数字,您就会通过地图对角线(同时增加i
和j
)并打印每个数字,直到您到达右侧或地图的底端。我认为这不是您想要存档的内容。由于我不知道你想打印什么,我不能告诉你如何解决这个问题。
编辑:如果你真的想要打印一个不正确的数字,你不需要在double for循环中使用while循环,只需打印不正确的值并让double for循环继续工作
编辑2:解决问题的可能方法:
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 4; j++) {
if (map[i][j] != 1 && map[i][j] != 0) {
b = false;
System.out.println("--> A value of " + map[i][j] + " was found at " + i + "," + j);
}
}
}
if(b){
System.out.println("The map is valid");
}else{
System.out.println("Map does not have the correct format");
}
此解决方案的唯一缺点是,它在打印错误值后打印错误消息。