嵌套 For 循环广场 - Java

问题描述 投票:0回答:3

我是 Java 新手,我正在使用嵌套 for 循环制作两个三角形的正方形。它应该看起来像这样:

+ + + + + 
* + + + + 
* * + + + 
* * * + + 
* * * * + 

到目前为止我的代码看起来像这样:

for (int i = 0; i < 5; i++) {             
for (int j = 0; j < i; j++) {               
System.out.print("* ");             
}  
System.out.println();

但它给我的只是广场的星形部分。我不知道如何离开这里。有人可以帮忙吗?

java for-loop nested
3个回答
1
投票

添加

i
星星后,请添加
5-i
加号

int lineLength = 5;
for (int i = 0; i < lineLength; i++) {
    for (int j = 0; j < i; j++) {
        System.out.print("* ");
    }
    for (int j = 0; j < lineLength - i; j++) {
        System.out.print("+ ");
    }
    System.out.println();
}

您可以使用

String.repeat
来简化代码

int lineLength = 5;
for (int i = 0; i < lineLength; i++) {
    System.out.println("* ".repeat(i) + "+ ".repeat(lineLength - i));
}

0
投票

编辑添加解释。

第一步是创建一个 5 x 5 的网格。我们可以通过创建两个 for 循环(一个在另一个循环中)来做到这一点。内部 for 循环将打印一行

* 
,外部 for 循环将在每行后打印一个新行。

下一步是确定何时打印

+ 
而不是
* 
。对于您的情况,简单的大于 (
y > x
) 就可以了。

for (int y = 0; y < 5; y++) {
    for (int x = 0; x < 5; x++) {
        System.out.print(y > x ? "* " : "+ ");
    }
    System.out.println();
}

使用 Desmos 图形计算器进行演示。
请注意,y 轴是反向的,您可以使用

-y > x
来获得正确的方向


0
投票

您可以利用 Arrays#fill 方法来预填充 char 的二维数组。

然后,迭代将相应的索引替换为星号。

char[][] characters = new char[5][5];
for (char[] row : characters) Arrays.fill(row, '+');
int count = 0;
for (char[] row : characters) {
    for (int index = 0; index < count; index++)
        row[index] = '*';
    count++;
}
int index = 0;
for (char[] row : characters) {
    for (char character : row) {
        if (index++ != 0) System.out.print(" ");
        System.out.print(character);
    }
    index = 0;
    System.out.println();
}

输出

+ + + + + 
* + + + + 
* * + + + 
* * * + + 
* * * * + 

此外,您可以使用允许输入值的方法。

void draw(int size, char charA, char charB) {
    char[][] characters = new char[size][size];
    for (char[] row : characters) Arrays.fill(row, charB);
    int count = 0;
    for (char[] row : characters) {
        for (int index = 0; index < count; index++)
            row[index] = charA;
        count++;
    }
    int index = 0;
    for (char[] row : characters) {
        for (char character : row) {
            if (index++ != 0) System.out.print(" ");
            System.out.print(character);
        }
        index = 0;
        System.out.println();
    }
}

示例用法和输出。

draw(20, '@', '-');
- - - - - - - - - - - - - - - - - - - -
@ - - - - - - - - - - - - - - - - - - -
@ @ - - - - - - - - - - - - - - - - - -
@ @ @ - - - - - - - - - - - - - - - - -
@ @ @ @ - - - - - - - - - - - - - - - -
@ @ @ @ @ - - - - - - - - - - - - - - -
@ @ @ @ @ @ - - - - - - - - - - - - - -
@ @ @ @ @ @ @ - - - - - - - - - - - - -
@ @ @ @ @ @ @ @ - - - - - - - - - - - -
@ @ @ @ @ @ @ @ @ - - - - - - - - - - -
@ @ @ @ @ @ @ @ @ @ - - - - - - - - - -
@ @ @ @ @ @ @ @ @ @ @ - - - - - - - - -
@ @ @ @ @ @ @ @ @ @ @ @ - - - - - - - -
@ @ @ @ @ @ @ @ @ @ @ @ @ - - - - - - -
@ @ @ @ @ @ @ @ @ @ @ @ @ @ - - - - - -
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ - - - - -
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ - - - -
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ - - -
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ - -
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ -
© www.soinside.com 2019 - 2024. All rights reserved.