用Java打印奇数序列中的奇数

时间:2015-11-19 05:39:34

标签: java

我的编程课有这个问题,我无法正确...输出必须是所有奇数,每行奇数,直到每行的数字数量满足作为输入的奇数输入。例如:

输入:5 正确的输出:

1
3 5 7
9 11 13 15 17

如果输入的数字是偶数或负数,则用户应输入不同的数字。这就是我到目前为止所做的:

public static void firstNum() {
    Scanner kb = new Scanner(System.in);
    int num = kb.nextInt();
    if (num % 2 == 0 || num < 0)
        firstNum();
    if (num % 2 == 1)
        for (int i = 0; i < num; i++) {
            int odd = 1;
            String a = "";
            for (int j = 1; j <= num; j++) {
                a = odd + " ";
                odd += 2;
                System.out.print(a);
            }
            System.out.println();
        }
}

public static void main(String[] args) {
    Scanner kb = new Scanner(System.in);
    firstNum();
}

输入(3)的输出是

1 3 5 
1 3 5 
1 3 5 

什么时候应该

1
3 5 7

任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:1)

试试这个:

public static void firstNum() {
    Scanner kb = new Scanner(System.in);
    int num = kb.nextInt();
    while (num % 2 == 0 || num < 0) {
        num = kb.nextInt();
    }
    int odd = 1;
    for (int i = 1; i <= num; i += 2) {
        String a = "";
        for (int j = 1; j <= i; j++) {
            a = odd + " ";
            odd += 2;
            System.out.print(a);
        }
        System.out.println();
    }
}

答案 1 :(得分:0)

WSResponse

你应该在for循环前指定奇数。 在内部循环中将j和奇数一起比较。

答案 2 :(得分:0)

好像我发帖有点迟了,这是我的解决方案:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter the odd number: ");
        int num = scanner.nextInt();
        if (num % 2 == 0 || num < 0) {
            firstNum();
        }

        if (num % 2 == 1) {
            int disNum = 1;
            for (int i = 1; i <= num; i += 2) {
                for (int k = 1; k <= i; k++, disNum += 2) {
                    System.out.print(disNum + " ");
                }
                System.out.println();
            }
        }
    }

答案 3 :(得分:0)

对于这样的问题,通常不需要使用条件语句。你的学校可能也不希望你也使用String。你可以控制一对循环中的所有东西。

这是我的解决方案:

int size = 7;   //size is taken from user's input
int val = 1;
int row = (size/2)+1;

for(int x=0; x<=row; x++){
    for(int y=0; y<(x*2)+1; y++){
        System.out.print(val + " ");
        val += 2;
    }           
    System.out.println("");
}

我遗漏了你需要检查输入是否为奇数的部分。

我如何得出我的代码:

  1. 观察所需输出中的图案。它由 组成。只需使用2个循环即可轻松形成打印输出。
  2. 使用外部循环来控制行数。内循环,用于控制每行中要打印的列数。
  3. 输入数字实际上是三角形底边的大小。我们可以使用它来获取行数。 这给了我们:int row = (size/2)+1;
  4. 棘手的部分是每行要打印的列数。
    • 第一行->打印1列
    • 第二行->打印3列
    • 第3行->打印5列
    • 第4行->打印7列,依此类推
  5. 我们发现 之间的关系实际上是: column = (row * 2) + 1

    因此,我们有:y<(x*2)+1作为内循环的控件。

    1. 只打印奇数,所以我们从val开始,每次增加val为2,以确保只打印奇数。 (val += 2;
    2. 测试运行:

      1 
      3 5 7 
      9 11 13 15 17 
      19 21 23 25 27 29 31 
      33 35 37 39 41 43 45 47 49 
      

答案 4 :(得分:0)

您可以使用两个嵌套循环(或流),如下所示:通过具有奇数个元素的行的外循环和通过这些行的元素的内循环。内部动作是依次打印和增加一个值。

  1. 一个循环中的循环
    int n = 9;
    int val = 1;
    // iterate over the rows with an odd
    // number of elements: 1, 3, 5...
    for (int i = 1; i <= n; i += 2) {
        // iterate over the elements of the row
        for (int j = 0; j < i; j++) {
            // print the current value
            System.out.print(val + " ");
            // and increase it
            val += 2;
        }
        // new line
        System.out.println();
    }
    
  2. 流中的流
    int n = 9;
    AtomicInteger val = new AtomicInteger(1);
    // iterate over the rows with an odd
    // number of elements: 1, 3, 5...
    IntStream.iterate(1, i -> i <= n, i -> i + 2)
            // iterate over the elements of the row
            .peek(i -> IntStream.range(0, i)
                    // print the current value and increase it
                    .forEach(j -> System.out.print(val.getAndAdd(2) + " ")))
            // new line
            .forEach(i -> System.out.println());
    

输出:

1 
3 5 7 
9 11 13 15 17 
19 21 23 25 27 29 31 
33 35 37 39 41 43 45 47 49 

另见:How do I create a matrix with user-defined dimensions and populate it with increasing values?