gpt4 book ai didi

java - 简单 Java 金字塔——使用 System.out.printf() 格式化输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:55 29 4
gpt4 key购买 nike

目标:

我正在尝试生成类似于下面给出的格式的金字塔。这需要一个基本的 Java 程序来接受用户输入、将数字转换为字符串、使用嵌套循环并生成格式化输出。下面是使用 8 行的所需输出示例。

Enter the number of lines: 8

1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
8 7 6 5 4 3 2 1 2 3 4 5 6 7 8

问题:

我相信我有适当增加数字的逻辑,但是我需要帮助来格式化金字塔。我可以在每个数字之间添加空格,但是如果行数 > 10,那么格式就会乱七八糟,如您所见。在最后一行(第 10 行),数字 1 不再居中。这是什么原因,我该如何解决?

我知道我可以使用 System.out.printf("%4s", value),但我想找到一种无需硬编码的方法,以防行数 > 1000。提前感谢您您知识渊博的头脑可以给我的任何指导。

                   1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
8 7 6 5 4 3 2 1 2 3 4 5 6 7 8
9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9
10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10

我的当前代码:

import java.util.Scanner;

public class Pyramid1
{
public static void main(String[] args)
{
int i, j, k, a;

//Create a Scanner object
Scanner input = new Scanner (System.in);

//Prompt the user to enter number of rows in pyramid
System.out.print("Enter number of rows: ");

int rows = input.nextInt();
a = rows;

//Logic
for (i=1; i<=rows; i++)
{
for (j=a; j>1; j--)
{
System.out.printf(" %s", " ");
}

for (k=i; k!=0; k--)
{
String str1 = "" + k;
System.out.printf(" %s", str1);
}
a--;

for (int l=2; l<=i; l++)
{
String str2 = "" + l;
System.out.printf(" %s", str2);
}

System.out.println();
}
}
}

最佳答案

您可以动态构建格式,而不是硬编码 System.out.printf("%4s", value),例如 "%"+ len + "s\n “。这是一个更简单的实现,也更容易理解。

int rows = 10;  
String[] pyramid = new String[rows];
pyramid[0] = "1";
for (int row = 1; row < rows; row++) {
pyramid[row] = (row + 1) + " " + pyramid[row - 1] + " " + (row + 1);
}

for (String line : pyramid) {
int len = (pyramid[rows - 1].length() + line.length()) / 2;
System.out.printf("%" + len + "s\n", line);
}

关于java - 简单 Java 金字塔——使用 System.out.printf() 格式化输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48375160/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com