将数组打印到字符串中

时间:2018-01-30 15:05:31

标签: java arrays

对于作业我必须使用打印方法创建五行连续游戏。所以基本上我的想法是方法遍历整个二维数组,并且每次有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 = "";
            }
        }
    }
}

4 个答案:

答案 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);

一步一步:

  1. Arrays.stream(board)将您的棋盘数组转换为String[]的流。

  2. .map(r -> String.join("-", r))将您的所有String[]映射到String,其中每个元素都加入“ - ”

  3. .forEach(System.out::println)直接在控制台上写了(如果您愿意,可以在案例中使用Terminal::printLine。)