Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二维数组到字符串的java代码_Java_Arrays_Tostring_Multidimensional Array - Fatal编程技术网

二维数组到字符串的java代码

二维数组到字符串的java代码,java,arrays,tostring,multidimensional-array,Java,Arrays,Tostring,Multidimensional Array,对于一个我必须编写的程序,我需要将一个由单个数字整数组成的二维数组转换成一个由空格分隔的数字字符串。为我提供了一个测试代码,当我运行它时,我的代码无法通过两个arrayToString测试。我找不到我的逻辑错误在哪里。谁来帮忙 public static String arrayToString(int[][] a) { String aString; aString = ""; int column; int row; for (row =

对于一个我必须编写的程序,我需要将一个由单个数字整数组成的二维数组转换成一个由空格分隔的数字字符串。为我提供了一个测试代码,当我运行它时,我的代码无法通过两个arrayToString测试。我找不到我的逻辑错误在哪里。谁来帮忙

public static String arrayToString(int[][] a) {

    String aString;     
    aString = "";
    int column;
    int row;

    for (row = 0; row < a.length; row++) {
        for (column = 0; column < a[0].length; column++ ) {
        aString = aString + " " + a[row][column];
        }
    aString = aString + "\n";
    }

    return aString;
}

您的代码基本上是正常的,只是在每行的开头都放了一个前导空格。要在返回前清理它们,请添加以下行:

aString = aString.replaceAll("(?m)^ ", "");

这将使用正则表达式通过在行的开始处替换为空格来删除。regex标志?m使“^匹配每行输入的开头”^通常只匹配输入的开头。

我可以想到三个可能的问题

测试代码不希望看到您在每行开始处放置的空格。 测试代码正在传递一个数组,其中一些条目为null。您的代码无法处理此问题。 测试代码正在传递一个数组,其中条目的长度不同。你的代码也不能处理这个问题。 在您发布测试代码之前,我们无法看到问题出在哪一个。但是你可以通过改变你的循环来处理这三个问题

for (row = 0; row < a.length; row++) {
    if (a[row] != null && a[row].length > 0) {
        aString = aString + a[row][0];

        for (column = 1; column < a[row].length; column++) {
            aString = aString + " " + a[row][column];
        }
    }
    aString = aString + "\n";
}
如果跳过此行,aString=aString+\n;您的输出将如下所示

1 2 3 4 5 6 7 8 9

@dawood ibn kareem解释了测试失败的可能原因

有了Java8流,做你想做的事情非常容易

输入:[[1,2,3],[3,4,5],[5,6,7]]

public static String arrayToString(int[][] a) {
    return Arrays.stream(a)
            .map(s -> Arrays.stream(s)
                            .mapToObj(String::valueOf)
                            .collect(Collectors.joining(" "))
            )
            .collect(Collectors.joining("\n"));
}
输出:

1 2 3
4 5 6
7 8 9
1 2 3
3 4 5
5 6 7
另一种方法,在不使用回车符的情况下分隔2D数组的每一行

public static String arrayToString(int[][] a) {
    return Arrays.stream(a)
            .flatMapToInt(Arrays::stream)
            .mapToObj(String::valueOf)
            .collect(Collectors.joining(" "));
}
输出

1 2 3 3 4 5 5 6 7

玩得开心

也许它不喜欢每行开头的额外空间。您是否可以发布测试代码,以便我们可以看到?由于您的代码按预期工作,您必须告诉我们预期的输出(又名:测试)是什么样子。可能是开始时的额外空间,但是我在执行时没有看到输出中的空间。我可以把测试代码贴在哪里让你们看@DavidWallace编辑问题。将测试代码附加到它。
1 2 3 3 4 5 5 6 7