последовательность пирамид в Java

#java

#java

Вопрос:

Я новичок в Java. Как раз сейчас я практикую. Если я ввожу данные как 6, выходные данные должны быть такими:

1
2 3
4 5 6

Здесь я публикую код, который я пробовал:

 import java.util.Scanner;

public class Number {
    public static void main(String args[]){

        int n;
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        in.close();
        int k = 1;
        for (int i = 1; i <= n; i  ) 
        {
            // k=i;
            for (int j = 1; j <= i; j  )
            {
                System.out.print(" "   k);
                if (n==k)
                {
                    break;
                }
                k  ;
            }       
            System.out.println("n");
        }
    }
}
  

Если я введу n = 4, я не смогу отобразить результат в виде:

1

2 3

4

4

Комментарии:

1. Идентификация позволяет сделать ваш код читаемым. Это минимум, который нужно сделать при обращении за помощью (и это в конечном итоге сделает решение вашей проблемы очевидным).

Ответ №1:

Ваш break выйдет только из внутреннего цикла (того, который повторяется j ). Внешний цикл продолжит выполняться, что приведет к печати дополнительных чисел.

Вам нужно либо заменить ее на return; или System.exit(0) , или поместить метку перед вашим внешним циклом (тем, который повторяется i ) и использовать помеченный разрыв.

Комментарии:

1. return вероятно, это лучший вариант.

2. Я согласен. Особенно когда код «вывести числовую пирамиду для n » извлекается в отдельный метод.

Ответ №2:

Сделайте правильный отступ в своем коде. Это помогает вашему мозгу понять.

Тем не менее, решение представляет собой два цикла с тремя переменными.

Вам нужен цикл, который идет от 1 до n.

Внутренний цикл, который переходит от 1 к количеству элементов в строке.

И вам нужно количество элементов в строке. Эта переменная увеличивается каждый раз, когда выполняется внутренний цикл.

Ответ №3:

Это плохо сформулированный вопрос, но я предполагаю, что вы хотите знать, почему дополнительные 4?

Причина в том, что у вас есть вложенные циклы, поэтому break прерывается только один цикл. Вот как можно выйти из внешнего цикла:

 outer: for (int i = 1; i <= n; i  ) {
...
break outer;
  

Метка outer произвольна — вы можете называть ее fred так, как хотите.

Ответ №4:

 int n = 6; // target

int i = 0;
int nextRowAt = 2;
int currentRow = 1;
while (  i <= n) {
    if (i == nextRowAt) {
        System.out.println();
        nextRowAt =   currentRow   i;
    }
    System.out.print(""   i   " ");
}
  

Но если вы не понимаете этого и не можете правильно объяснить код, вы, вероятно, получите сбой при выполнении вашего задания.

Мое предложение состоит в том, чтобы начать с создания / понимания на ручке и бумаге. Выпишите последовательности и выясните, как должен работать алгоритм. ЗАТЕМ вы начинаете ее кодировать.

Ответ №5:

 int sum =0;
int n =10;
//        n------> number till where you want to print
boolean limtCrossed = false;
for (int i = 0; i < n amp;amp;!limtCrossed; i  ) {
 for(int j=0;j<=i;j  ) {
  sum  ;
  if (sum>n) {
    limtCrossed = true;
    break;
  }
  System.out.print(  sum  " " );
 }

 System.out.println("n");

} 
  

Комментарии:

1. Не могли бы вы, пожалуйста, выделить основные аспекты вашего ответа и как это решает проблему?

Ответ №6:

 public static void main(String[] args) 
{
    int n = 10;
    int k = 1;
    boolean breakOuter = false;
    for (int i = 1; i <= n; i  ) 
    {
    for (int j = 1; j <= i; j  )
    {
        System.out.print(" "   k);
        if (n==k)
        {
        breakOuter = true;
        break;
        }
        k  ;
    }
    if(breakOuter) break;
    System.out.println("n");
    }
}
  

Комментарии:

1. Это … неэлегантно. Я не большой поклонник помеченных разрывов, но здесь было бы намного приятнее.

2. Помеченные разрывы кажутся своего рода базовыми во всех смыслах этого слова 🙂