Nest Loops,无法弄清楚如何编写代码

Bre*_*ent 5 java loops nested jgrasp

嘿,我有一个问题,我一直试图找出几个小时,我需要使用嵌套循环打印以下

    -----1-----
    ----333----
    ---55555---
    --7777777--
    -999999999-
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所拥有的.

    public static void Problem6 () {
        System.out.println("Problem 6:");
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--) {
                System.out.print("-");
            }
            for (int j = 1; j <= 9; j += 2) {
                System.out.print(j);
            }
            for (int j = 5; j >= i; j--) {
                System.out.print("-");
            }
            System.out.println();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这就是它打印的内容

    -----13579-----
    ----13579----
    ---13579---
    --13579--
    -13579-
Run Code Online (Sandbox Code Playgroud)

rli*_*liu 8

您有正确的短划线数,只是没有正确打印出数字.让我们来看看为什么:

哪个循环打印出数字?第二个嵌套for循环.

它有什么作用?它打印出j其中j的范围是从19j由2循环的每次迭代递增.换句话说,1, 3, 5, 7, 9这在您的输出中得到确认

你想要它做什么?那么让我们来看看所需的输出.你想1被打印一次第一第一线.你想3被打印3本次第三下一行.您希望在此之后的第五5打印五次.等等.

你注意到一个模式吗?你想要的循环中,我们上面提到的打印相同的数(1,3,5,... i)的次数(1,3,5,... i).

编辑 Whooops我实际上误读了输出.我的答案仍然与以前非常相似,但我撒谎说你打印的是哪一行.它仍然是3 3倍,5 5倍,但不同的线路.从我的解决方案跳到实际解决方案的最简单方法是注意在偶数行上......你什么都不做.你甚至可以用这种方式编写你的解决方案.

另一个提示是,您应该专注于将每行上的数字和破折号分开.当你修复每一行的数字时,你可能会搞砸破折号码,但是你会发现如何轻松修复破折号.