Печать строк с увеличивающимся количеством четных чисел

#java #numbers

#java #числа

Вопрос:

Я пытаюсь напечатать следующее:

 2
2 4
2 4 6 ..etc
  

Написанный мной код (ниже) выводит следующее:

 2
4 6
8 10 12 ...etc
  

Кто-нибудь может определить, где я ошибаюсь? Переменная n берется из метода main, который я не включаю.

 public static void printEvenTable(int n) {
    int i;
    int j;
    int k = 0;

    for (i = 1; i <= n; i  ) {
        for (j = 0; j < i; j  )
            System.out.print(" "   (k  = 2));
        System.out.println(" ");
    }
}
  

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

1. Инициализация k в настоящее время находится вне вашего цикла.

Ответ №1:

Вам нужно запретить переменной k использовать ее старое значение, переназначив ей 0 сразу после второго for цикла. Размещение k = 0; перед вторым for циклом делает избыточным переназначение, поскольку оно уже было назначено непосредственно перед циклом. Обеспечьте оптимизацию программы. Если вы используете хороший редактор, он покажет вам некоторое предупреждение, если поместить его перед вторым for циклом.

 for (i = 1; i <= n; i  ) {
    for (j = 0; j < i; j  ) {
         System.out.print(" "   (k  = 2));
     }
     k=0;
     System.out.println(" ");
}
  

Ответ №2:

Здесь внутренний цикл увеличивает переменную k на 2 каждый шаг после того, как первое выполнение внутреннего цикла k становится 2 от начального значения 0 . На второй итерации внешнего цикла k начинается как 2 . После k =2 , k становится 4 таким образом, вторая строка вывода начинается с 4 . Вот почему нам нужно повторно инициализировать k на 0 перед каждым внутренним циклом.

 public static void printEvenTable(int n) {
    int i;
    int j;
    int k = 0;

    for (i = 1; i <= n; i  ) {
         k = 0;
         for (j = 0; j < i; j  )
            System.out.print(" "   (k  = 2));


        System.out.println(" ");
    }
}
  

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

1. Это сработало, спасибо. Для моего собственного понимания не могли бы вы, пожалуйста, объяснить, почему потребовалось это изменение?

2. @JEarls Я объяснил. Пожалуйста, проверьте редактирование. И, если это поможет, не стесняйтесь принимать это как ответ.