我正在尝试打印出2D数组的右下角三角形,但我得到了反转的元素三角形:
int[][] a3 = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16},
};
System.out.println("Lower right triangle");
for (int row = 0 ; row < a3.length ; row++){
for (int col = 3 ; col >= a3[0].length-row-1 ; col--) {
System.out.print("\t" + a3[row][col]);
}
System.out.println();
}
输出如下:
4
8 7
12 11 10
16 15 14 13
而不是:
4
7 8
10 11 12
13 14 15 16
答案 0 :(得分:1)
以下是您的解决方案..尝试理解逻辑并询问是否有任何疑问。希望它可以帮到你
for (int row = 0 ; row < a3.length ; row++){
for (int col = 0 ; col < a3[0].length ; col++) {
if(col>=a3[0].length-1-row){
System.out.print(a3[row][col]+"\t");
} else {
System.out.print("\t");
}
}
System.out.println();
}
答案 1 :(得分:0)
int[][] a3 = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16},
};
System.out.println("Lower right triangle");
for (int row = 0 ; row < a3.length ; row++){
for (int col = 0 ; col <= a3[row].length-1 ; col++) {
if(col < a3[row].length-row-1){
System.out.print("\t");
}else{
System.out.print("\t" + a3[row][col]);
}
}
System.out.println();
}
输出:
Lower right triangle
4
7 8
10 11 12
13 14 15 16
答案 2 :(得分:0)
在没有给出完整答案的情况下,请考虑以下事项......在您的解决方案中,您从右到左工作。为了最好地解决这个问题,你应该从左到右打印(这是遍历的顺序)。为此,您还需要利用行和列索引来确定打印顺序:
if(((a3[0].length - 1) - row) <= col) {
System.out.print(a3[row][col] + "\t");
} else {
System.out.print("\t");
}
答案 3 :(得分:0)
这是另一种打印方式。你保留一个标志来检查你是否缩进了为行打印的第一个数字。此缩进将取决于您开始打印的列。然后,随后,所有打印的数字将在它们后面附加一个缩进。
初始缩进发生的次数基于col
,其计算方式为a3[0].length - row - 1
。
for (int row = 0; row < a3.length; row++) {
boolean formatted = false;
for (int col = a3[0].length - row - 1; col <= 3; col++) {
if (!formatted) {
for (int i = 0; i <= col; i++) {
System.out.print("\t");
formatted = true;
}
}
System.out.print(a3[row][col] + (col < 3?"\t":""));
}
System.out.println();
}
}
输出:
4
7 8
10 11 12
13 14 15 16
要直观地了解缩进的应用方式,请使用X
代替\t
。这是输出。希望这有助于理解初始缩进的应用方式,然后是后续的缩进。
XXXX4
XXX7X8
XX10X11X12
X13X14X15X16