【问题标题】:How to print a number pattern如何打印数字模式
【发布时间】:2017-12-29 10:29:06
【问题描述】:

所以我有这个任务要做: (显示图案)编写一个显示图案的方法如下:

方法头是: public static void displayPattern(int n)


基本上,我了解“如何”进行练习,甚至自己编写代码并获得了 99% 的正确代码。 我知道我需要执行 2 个循环,一个打印空格并且每次下降 1,另一个打印空格后的数字并倾斜 1。

这是我的方法:

public static void printPattern(int n) {
    int m =1;
    int k=1;
    while (m-1-1 <=n) {
        int numberOfWhiteSpaces = n -1;
        for (int i = numberOfWhiteSpaces; i >= 0; i--) {
            System.out.print(" ");
        }
        for (k=m; k>0; k--) {
            System.out.print( k + "");
        }
        System.out.println();
        m++;
        n--;
    }
}

假设我打电话

printPattern(3);

我唯一的问题是输出是这样的:

   1
  21
 321

数字之间没有空格,是的,我试图改变这个:

System.out.print( k + "");

到这里:

System.out.print( k + " ");

结果? :

我在这个问题上已经连续 2 个小时了,无法正确解决。 可能需要一些帮助,谢谢大家。

【问题讨论】:

  • 错字。 System.out.print( k + ""); 应该是 System.out.print( k + " "); - 不过有更好的方法。
  • @ElliottFrisch 已经尝试过了,看看它给我的输出。另外,如果你能提示我任何其他方法,我很乐意听到。
  • 看起来您没有在左侧打印足够的空白区域。你会如何解决这个问题?
  • 如果您在第二个打印中添加一个空格,您还需要在第一个打印中添加一个空格。加分:n 超过 1 位数会怎样?
  • @ajb 你的问题,我猜对了,非常感谢!

标签: java


【解决方案1】:

发生这种情况是因为您没有正确计算空格数:您的代码假定您需要在字符串的前缀部分为每个打印的数字留一个空格。但是,当您切换到k + " " 时,前缀将需要两个空格,而不是每个打印的数字(假设是个位数)。因此,当你在第二个循环中切换到k + " "时,你还需要在第一个循环中切换到System.out.print(" ");(两个空格)。

这将解决单位数字的问题。推广到多位数需要更多的工作:您需要计算最后一行的位数,然后计算当前行的位数,并打印所需的前缀空格数以补偿差异。

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    相关资源
    最近更新 更多