我需要生成序列的一部分 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 ...(该数字重复多次,等于)

ZKc*_*der 0 java

我得到了这个作为家庭作业,但我坚持理解我的代码的错误行为。

任务如下:编写一个程序,打印出序列 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 ...(该数字重复多次,直到等于)的一部分。程序的输入是一个正整数 n:程序应该打印的序列元素的数量。输出以空格分隔的单行数字序列。

例如,如果 n = 7,那么程序应该输出 1 2 2 3 3 3 4。

样本输入 1:

7

示例输出 1:

1 2 2 3 3 3 4

这是我的代码(底部输出:

import java.util.Scanner;

class Test1 {

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

        System.out.println("Enter: );
        int totalNum = scanner.nextInt();
        
        int counter = 0;
        
        for(int i = 1; i <= totalNum; i++){
            for(int j = 1; j <= i; j++){
                counter++;
                System.out.println(" " + i);
        
            }
            
        }
    }
    
 }

Run Code Online (Sandbox Code Playgroud)

这是我的输出(输入为 4):

全部在新线路上,不在同一条线路上

4
 1
 2
 2
 3
 3
 3
 4
 4
 4
 4
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么我的输出和所需的输出不同吗?:)

Dee*_*kar 5

您需要在程序中进行两项更正:

  1. 在行中添加结束双引号 System.out.println("Enter: );
  2. 您还必须更改您的算法。问题陈述要求您只应打印 n 个数字,但您正在打印序列 1, 2, 2, 3, 3, 3, ...n,n,n,n。您可以添加一个检查,当计数器等于 n 时,您应该中断。
       boolean shouldBreak = false;
       
       for(int i = 1; i <= totalNum; i++){
           for(int j = 1; j <= i; j++){
               if(counter == totalNum){
                   shouldBreak = true;
                   break;
               }
               counter++;
               System.out.print(i + " ");
           }
           if(shouldBreak){
               break;
           }
           
       }

Run Code Online (Sandbox Code Playgroud)