忽略第1-55行,有人可以告诉我为什么我的开关不适用于字符'v'和'| '无论什么时候出现?我放了一些打印行声明(第57,58行)来查看发生了什么,但它们甚至没有被执行!
只有第56行执行,然后继续读取文件以获取更多字符,跳过“v”和“|”的过程'人物......
每个其他开关都可以正常工作,不包括那两个。
input是一个BufferedReader,用于看起来像这样的文本文件
的test.txt
50
5
3
0
s-o o-o-o
| v v | v
o-o-o-oho
v | v |
o-o-o-e-o
以下是代码的相关部分:
// loop through remaining lines of file
while (line != null) {
// get characters in the line
for (int j = 0; j < line.length(); j++) {
// if character is even, it is a node
ch = line.charAt(j);
if (j % 2 == 0) {
System.out.println("character even and is: " + ch);
switch (ch) {
case 's':
System.out.println("s test worked");
break;
case 'e':
System.out.println("e test worked");
break;
case 'o': // increase the node count
break;
}
}
// else character is odd, it is an edge
else {
System.out.println("character odd and is: " + ch);
System.out.println(ch == 'v'); // Line 57
System.out.println(ch == '|'); // Line 58
switch (ch) {
// horizontal wall
case 'h':
System.out.println("h test worked");
break;
// horizontal hall
case '-':
System.out.println("- test worked");
break;
// vertical wall
case 'v':
System.out.println("v test worked");
break;
// vertical hall
case '|':
System.out.println("| test worked");
break;
// unbreakable wall
case ' ': // don't do anything
break;
}
}
}
line = input.readLine();
}
此处is a link to complete, compilable code, given that you give the program the text file as an argument。
答案 0 :(得分:2)
这是因为您的代码假定所有边都位于奇数位置。但是,这仅对水平边缘是正确的;垂直边缘(即奇数行上的边缘)位于偶数位置。
您可以通过添加行计数器来解决此问题,如下所示:
int lineCounter = 0;
while (line != null) {
// get characters in the line
for (int j = 0; j < line.length(); j++) {
// if character is even, it is a node
ch = line.charAt(j);
if ((lineCounter+j) % 2 == 0) {
...
} else {
...
}
}
line = input.readLine();
lineCounter++;
}
此代码查找偶数行上奇数位置的边,以及奇数行上的偶数位置。