【问题标题】:Decreasing number pyramid, nested for loop, user input, java递减数字金字塔,嵌套for循环,用户输入,java
【发布时间】:2019-10-15 03:26:36
【问题描述】:

编写一个程序,对介于两者之间的任何给定整数生成以下输出 包括 1 和 9。

输入一个整数值[1..9]:6

1
12
123
1234
12345
123456
666666
66666
6666
666
66
6

我已经完成了上半部分,但我无法通过重复的用户输入找出底部。

package lab7;

import java.util.Scanner;

public class problem5 {
    public static void main(String[] args) {
        Scanner scan =  new Scanner (System.in);
        System.out.println("Input an integer between 1 and 9");
        int input = scan.nextInt();
        while (input <= 9) {
            for (int i = 1; i <= input; i++) {
                for (int j = 1; j <= i; j++) {
                    System.out.print(j);
                }
                System.out.println();
            }
            break; 
        }
    }   
}

预期结果:包含在顶部;到目前为止的实际结果(输入 5):

1
12
123
1234
12345

【问题讨论】:

  • 当您达到所选数字时,您需要记住金字塔的深度。然后你做一个新的循环来减少这个深度
  • :s/deep/depth/g

标签: java


【解决方案1】:

你已经很接近了。你有一个for 循环,它覆盖了你想要的输出的前半部分。您可以添加第二个for 循环来处理输出的后半部分。

这与第一个循环非常相似,但有一些小的区别:

  • 循环变量不是从 1 开始并递增,而是从 input 开始,递减i-- 而不是 i++
  • 它不打印任何循环变量(ij),而是打印 input 值(在您的示例中为“6”)
for (int i = input; i > 0; i--) {
    for (int j = 1; j <= i; j++) {
        System.out.print(input);
    }
    System.out.println();
}

如果我在本地运行该代码 - 所以你的 for 循环,然后是 for 循环,然后是 break 语句 - 这是输出:

Input an integer between 1 and 9
6
1
12
123
1234
12345
123456
666666
66666
6666
666
66
6

【讨论】:

    【解决方案2】:

    我更喜欢更高效的算法,你目前的方法是 O(n2);考虑数字“1”-“9”;如果我们将它们存储在String 中,那么我们可以为顶部的每一行(例如,“123456789”.substring(0, 3) -> “123”)获取该 String 的简单子字符串,它可以是用于通过连续调用substring 生成顶部。我们可以使用类似的方法来构建底部;使用所有可能行的数组并迭代调用substring。最后,不要忘记验证input 介于 1 到9 之间。比如,

    Scanner scan = new Scanner(System.in);
    String digits = "123456789";
    String[] btm = { "1", "22", "333", "4444", "55555", 
            "666666", "7777777", "88888888", "999999999" };
    System.out.println("Input an integer between 1 and 9");
    int input = scan.nextInt();
    if (input < 1 || input > 9) {
        System.err.printf("Invalid input: %d%n", input);
        System.exit(1);
    }
    for (int i = 0; i < input; i++) {
        System.out.println(digits.substring(0, i + 1));
    }
    for (int i = input - 1; i >= 0; i--) {
        System.out.println(btm[input - 1].substring(0, i + 1));
    }
    

    【讨论】:

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