【问题标题】:How to make it in order如何按顺序制作
【发布时间】:2019-09-03 15:45:12
【问题描述】:
public static void verticalNumber(int n) {
    while (n > 0) {
        n /= 10;
        System.out.printf("%d\n", n % 10);

    }
    System.out.printf("\n");
}

public static void main(String[] args) {
    verticalNumber(1234);
}

我想这样显示数字(1234)

1

2

3

4

【问题讨论】:

  • 你的问题是?
  • 1 个问题是 n/=10。这意味着 n= 123 然后你打印 n%10 即 3。 4 永远消失了,再也不会被听到了。你需要 %10。将答案推送到堆栈然后 /10 并重复所有解析的数字。
  • 那么您需要保持其余的值(您所做的)以及计算要显示的当前数字(您不做的)。

标签: java printf vertical-alignment


【解决方案1】:

创建一个列表,当你的数字不是 0 时;添加数字 mod 10 到它,数字变成数字 div 10,最后,你将有一个包含你的数字的列表,按 4,3,2,1 的顺序,使用 boocle 从列表的大小开始,到 0 显示它们的内容

【讨论】:

    【解决方案2】:

    你正朝着正确的方向前进。但是,如果您在打印之前执行n/=10,您已经丢失了最后一位数字(1234 将变为123)并且以下行将打印3

    如果您将 while 上的两行反转,您将垂直打印它。但是,它会颠倒过来。然后您可以旋转显示器以正确的顺序查看(开个玩笑)。

    我能想到的最简单的方法是将n%10 结果放到一个列表中,然后添加另一个循环以反向打印它。

    【讨论】:

      【解决方案3】:

      n/=10 需要在 printf 之后。
      或者,您可以这样做:

      String.valueOf(n).chars().mapToObj(Character::toString).forEach(System.out::println);
      
      // If you need the extra newlines:
      String.valueOf(n).chars().mapToObj(Character::toString).map(c->c+"\n").forEach(System.out::println);
      

      【讨论】:

        【解决方案4】:

        恕我直言,最简单的方法是将其转换为String,将String 转换为单字符Strings,然后将这些单独的数字(如Strings)转换回ints 并存储它们在Array。像这样:

        public static void verticalNumber(int n) {
            int[] nums = Arrays.stream(Integer.toString(n).split(""))
                    .mapToInt(s -> Integer.parseInt(s))
                    .toArray();
            for (int num: nums) {
                System.out.println(num);
            }
        }
        

        所以:

        • 1234 变为 "1234"
        • "1234" 变为 ["1", "2", "3" "4"]
        • ["1", "2", "3" "4"] 变为 [1, 2, 3, 4]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-09
          相关资源
          最近更新 更多