对于我必须编写的程序,我需要将单个数字整数的二维数组转换为由空格分隔的数字串。为我提供了一个测试代码,当我运行它时,我的代码都无法通过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;
}
答案 0 :(得分:0)
我可以想到三个可能的问题。
在发布测试代码之前,我们无法看到问题所在。但是你可以通过改变你的循环来处理这三个问题。
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";
}
答案 1 :(得分:0)
int[][] a = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
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;
}
输出:
1 2 3
4 5 6
7 8 9
如果您跳过此行aString = aString + "\n";
,您的输出将如下所示
1 2 3 4 5 6 7 8 9
答案 2 :(得分:0)
使用Java 8 Stream,您可以轻松完成所需的操作!
输入:[[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
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
玩得开心!
答案 3 :(得分:-1)
您的代码基本上没问题,除非您在每行的开头放置一个前导空格。要在返回之前清理它们,请添加以下行:
aString = aString.replaceAll("(?m)^ ", "");
这使用正则表达式删除(通过替换为空白)行开头的所有空格。正则表达式标志(?m)
使^
与输入的每一行的开头匹配(通常^
仅匹配输入的开头)。