对于作业我必须使用打印方法创建五行连续游戏。所以基本上我的想法是方法遍历整个二维数组,并且每次有0时它都会添加一个" - "改为String行。当有1或2时,它会添加数字。完成[j]数组后,它会打印整行并重新初始化该行。终端是另一个类,它给我们打印类中的所有内容。
问题是整个方法根本没有打印任何东西,我也不知道问题可能在哪里。
public static void print() {
String row = "";
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if (board[i][j] == 0) {
row += "-";
} else {
row += (char) (board[i][j]);
}
if (j == board[i].length) {
Terminal.printLine(row);
row = "";
}
}
}
}
答案 0 :(得分:1)
因为变量j永远不会等于board [i]的长度。
你的for循环i只从0,1,2,...,board.length - 1迭代。
与你的循环j相同。它只从0,1,2,...,board [i] .length - 1
迭代除非您使用j <= board[i].length
,否则它可能会抛出IndexOutOfRangeException。
您的代码应该是这样的。
public static void print() {
String row = "";
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if (board[i][j] == 0) {
row += "-";
} else {
row += (char) (board[i][j]);
}
if (j == board[i].length - 1) {
Terminal.printLine(row);
row = "";
}
}
}
}
答案 1 :(得分:0)
首先,我建议您使用StringBuilder
追加方法而不是String
连接。
程序永远不会进入这个if语句,因为j永远不会等于board [i] .length。
if (j == board[i].length) {
Terminal.printLine(row);
row = "";
}
相反,你可以将j与board [i] .length - 1进行比较,但这只是无用的。您可以将Terminal.printLine(行)移动到内部for循环之外。
我会为你重构代码:
public static void print() {
StringBuilder row = new StringBuilder();
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if (board[i][j] == 0) {
row.append("-");
} else {
row.append((char) (board[i][j]));
}
}
Terminal.printLine(row.toString());
row = new StringBuilder();
}
}
如果StringBuilder
在这种情况下效率低下,你仍然可以使用String但我的意见是StringBuilder
总是更好。
答案 2 :(得分:0)
尝试用if (j == board[i].length)
替换if (j == board[i].length - 1)
阻止。由于你的for循环一直持续到board[i].length
,它永远不会输入你的if语句。
此外,如果您的数组是整数数组并使用(char) (board[i][j])
将整数转换为char,您将获得值为1的ASCII值,该值不等于&#39; 1&#39;, &#39; 2&#39;等。如果是这种情况,请使用(char)(board[i][j] + '0')
。
答案 3 :(得分:0)
此问题中的其他人试图帮助您处理现有代码。花一些时间来发现Java 8 Streams API,用它来解决你的问题非常简单!
String[][] board = {{"a", "a", "a"}, {"b", "c", "d"}, {"e", "f", "g"}};
Arrays.stream(board).map(r -> String.join("-", r)).forEach(System.out::println);
Arrays.stream(board)
将您的棋盘数组转换为String[]
的流。
.map(r -> String.join("-", r))
将您的所有String[]
映射到String
,其中每个元素都加入“ - ”
.forEach(System.out::println)
直接在控制台上写了(如果您愿意,可以在案例中使用Terminal::printLine
。)