我想做一个用1和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的值,则将它们报告给用户。如果没有错误,它应该报告“地图是有效的”。我有两个问题,第一个问题是,当数组是正确的并且没有错误(只由1和0组成)时,它不会显示任何东西,而它应该显示“地图格式正确”。第二个问题是更重要的问题,数组的底线似乎有问题。它跳过像4这样的不正确的值,只报告结束行,这是位置3,3的0。这是一个正确的值,所以我不确定这是怎么回事。其他代码行没有这个问题,它们会像3和2一样报告正确的错误。有人知道哪里出了问题吗?
发布于 2016-10-28 00:33:22
所以这显然是true,而else块永远不会被调用。
在执行if (map[i][j] != 1 && map[i][j] != 0){的同时使用boolean b是多余的。
对于第二个问题:一旦你发现了一个错误的数字,你就会对地图进行对角扫描(同时增加i和j ),并打印每个数字,直到你到达地图的右端或底端。我不认为这是你想存档的东西。因为我不知道你想打印什么,所以我不能告诉你如何解决这个问题。
编辑:如果你真的想打印一个不正确的数字,你不需要在双精度for循环中使用while循环,只需打印不正确的值,让双精度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");
}此解决方案的唯一缺点是,它会在打印不正确的值后打印错误消息。
https://stackoverflow.com/questions/40289564
复制相似问题