有什么方法可以打印以下图案?

时间:2019-11-28 13:49:06

标签: java

    class pattern
    {
        public static void main()
        {
            int i,j,p=1;
            for(i=1;i<=5;i++)
            {
                for(j=1;j<=i; j++)
                {
                   System.out.print(p+" ");
                   p=p+2;
                }
                if(i>=2)
                p=p-2;
               System.out.println ();
            }
        }
    }

我想要下面的书面输出

1
3 5
5 7 9
7 9 11 13
9 11 13 15 17

但是上面给出的代码所获得的输出在下面给出

1
3 5 
5 7 9
9 11 13 15 
15 17 19 21 23

我希望第二行的最后一位显示在第三行的开头,第三行的最后两位显示在第四行的开头,依此类推。

3 个答案:

答案 0 :(得分:0)

在我看来,您的问题是您试图保留错误的内容,即所打印的号码。相反,请跟踪当前所在行和当前所在行中的当前项目。

  1. 遍历所有行
  2. 对于每行:确定a)起始编号b)您需要打印多少项
  3. 循环从起始编号开始,并打印您需要打印的项目

    IntStream.range(0, 5)
        .mapToObj(line -> IntStream.range(0, line+1)
            .map(i -> (line*2+1) + (2 * i))
            .mapToObj(Integer::toString)
            .collect(Collectors.joining(" ")))
    .forEach(System.out::println);
    

答案 1 :(得分:0)

int length = 5;
for(int start = 1; start < length*2; start += 2){
  for(int j = start;j < start*2; j += 2)
    System.out.print(j + " ");
  System.out.println();
}

正如AntoineB所说,StackOverflow不是一个做家庭作业的网站,您至少应该尝试自己解决问题,如果某些部分您不了解,请寻求帮助。不要指望别人做你的家庭作业

答案 2 :(得分:0)

请注意每行第一个数字的模式:

row 0 -> 1
row 1 -> 3
row 2 -> 5
row 3 -> 7
row 4 -> 9

这是row*2 + 1

因此,您需要为每一行循环并计算第一个数字。然后,为每列添加2。

for(int row = 0; row < 5; row++) {
    int value = 2*row + 1;

    for(int col=0; col <= row; col++) {
        System.out.print(value+" ");
        value = value+2;
    }
    System.out.println();
}