问题:
我有一个二维数组,里面充满了数字。我必须以一种显示的方式输出它: "*"
不同价值观的邻居之间 " "
如果值相同。例子:
*********
* 1 1*3*4*
*******
* 2 2*3*4*
*********
我尝试过很多方法,比如用 [Nx2][Mx2]
大小或 System.out.format
但最终它的格式从来都不是我喜欢的。有什么建议我怎么解决这个问题?
private static void changeColumn(int[][] secondLayerArr, int n, int m) {
String[][] finalLayerArr = new String[n * 2 - 1][m];
int finalLayerRow = -2;
//second layer output
for (int i = 0; i < n; i++) {
finalLayerRow += 2;
for (int j = 0; j < m; j++) {
if (j < m - 1) {
if (secondLayerArr[i][j] != secondLayerArr[i][j + 1]) {
finalLayerArr[finalLayerRow][j] = (secondLayerArr[i][j]) + "*";
// System.out.print(secondLayerArr[i][j] + "*");
} else {
finalLayerArr[finalLayerRow][j] = (secondLayerArr[i][j]) + " ";
// System.out.print(secondLayerArr[i][j]);
}
} else {
finalLayerArr[finalLayerRow][j] = (secondLayerArr[i][j]) + "*";
//System.out.print(secondLayerArr[i][j]+"*");
}
}
}
printColumn(finalLayerArr);
}
public static void changeRow(String[][] finalLayerArr) {
for (int i = 0; i < finalLayerArr[0].length; i++) {
System.out.print("***");
}
System.out.println();
for (int i = 0; i < finalLayerArr.length; i++) {
System.out.print("*");
for (int j = 0; j < finalLayerArr[0].length; j++) {
if (finalLayerArr[i][j] == null) {
if (finalLayerArr[i - 1][j].equals(finalLayerArr[i + 1][j])) {
finalLayerArr[i][j] = " ";
} else {
finalLayerArr[i][j] = "*";
}
}
System.out.printf("%2s", finalLayerArr[i][j], "");
}
System.out.println();
}
}
它显示类似于我想要的结果,但它的格式与表中的格式不同。
3条答案
按热度按时间mspsb9vt1#
您可以组成一个字符串数组,该数组由第一个数组及其相邻元素(即)中的数字组成。e。空格和星号。如有必要,用前导零和适当的相邻元素计数格式化它们。对于每一行,创建两个字符串数组,即。e。具有水平邻域的元素和具有垂直邻域的中间数组,以及前后行的星号。然后将它们垂直展平,并将行中的元素水平连接成一个字符串:
输出:
lmvvr0a82#
通过首先遍历数组中的数组数,然后遍历每个数组来遍历2d数组。
在各个数组中,检查这是否是数组中的第一项。如果是,请打印
*
. 然后检查前一个是否相等等,。对于[具有相同项]的相邻行之间的“leave”,我们可以将星行存储在stringbuilder中,并在末尾打印出来。
打印内容:
这花了太多时间
db2dz4w83#
可以循环遍历数组中不是最后一行的每一行,然后遍历数组中不是最后一行的每一个字母,并检查它是否等于右边的一个和下面的一个。如果是,打印合适的东西。
大致如下:
希望这有帮助:)