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

Printing Array:
 1    2    3    4    5    6    7    8    9   10
11   12   13   14   15   16   17   18   19   20
21   22

Он должен быть выровнен, как показано выше, и строка должна содержать только 10 цифр. Кажется, у меня все отформатировано правильно, но мои результаты не выглядят так.

Вот что я получаю:

Printing Array:
 1
 2    3    4    5    6    7    8    9    10    11
12   13   14   15   16   17   18   19    20    21
22

Я не совсем уверен, что делаю не так, но вот мой код:

//disregard the name 'Juice', I like to give my programs weird names

public class Juice 
{
  public static void main(String[] args) 
  {
      //sets up the array
      int[] numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22};

      //title
      System.out.println("Printing Array: ");

      //counting the elements
      for (int i = 0; i < numbers.length; i++)
          {
              //prints each element value with 4 spaces in between
              System.out.printf("%4d", numbers[i]);

              //once line reaches ten values; print new line
              if (i % 10 == 0)
              {
                System.out.printf("\n");
              }
          }
   }
}
-1
user3718591 9 Июн 2014 в 13:08
Очень извиняюсь, это мой первый вопрос.
 – 
user3718591
9 Июн 2014 в 13:15
Вы пропустили 3 и 11. Зачем ты вообще написал этот массив? Почему бы просто не зациклить от 1 до 22 в цикле for?
 – 
user2357112
9 Июн 2014 в 13:16
Прости за это. Не уверен, почему я не использовал цикл. Сохранил его базовым.
 – 
user3718591
9 Июн 2014 в 13:22
Не просто меняйте вывод! В свой массив вы забыли включить числа 3 и 11, из-за чего эти числа не отображаются в вашем выводе. Не редактируйте свой вопрос, чтобы исправить ошибку; это создает движущуюся цель для отвечающих и рискует заставить правильные ответы выглядеть неправильными. Определенно не меняйте вывод на то, чего не создает опубликованный код.
 – 
user2357112
9 Июн 2014 в 13:22
Хм... журнал изменений не совпадает с моей памятью, и я не уверен, связано ли это с правками в льготный период или с невнимательностью. В любом случае, мне пора спать.
 – 
user2357112
9 Июн 2014 в 13:33

4 ответа

Лучший ответ
if ((i+1) % 10 == 0)
 {
    System.out.printf("\n");
 }
4
Srinath 9 Июн 2014 в 13:15

Ваш код делает то, о чем вы его просили.

В первом цикле i=0, но i % 10 == 0 также истинно, поэтому он печатает новую строку. Вы можете использовать множество различных подходов, чтобы исправить это, но, вероятно, самым простым будет заменить это условие на (i+1) % 10 == 0 или на i % 10 == 9.

3
mvp 9 Июн 2014 в 13:15
Спасибо за объяснение! Помогает мне понять изменение.
 – 
user3718591
9 Июн 2014 в 13:23

Ты почти сделал это

public class Juice 
{
  public static void main(String[] args) 
  {
      //sets up the array
      int[] numbers = {1,2,3,4,5,6,7,8,9,10,12,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};

      //title
      System.out.println("Printing Array: ");

      //counting the elements
      for (int i = 0; i < numbers.length; i++)
          {
              //prints each element value with 4 spaces in between
              System.out.printf("%4d", numbers[i]);

              //once line reaches ten values; print new line
              if (i % 10 == 9)
              {
                System.out.printf("\n");
              }
          }
   }
}

Я изменил условия на if (i % 10 == 9)

ВЫХОД

Printing Array: 
   1   2   3   4   5   6   7   8   9  10
  11  12  13  14  15  16  17  18  19  20
  21  22  23  24  25  26  27  28  29  30
  31  32
1
T.G 9 Июн 2014 в 13:16
2
i != 0 не требуется.
 – 
Tanmay Patil
9 Июн 2014 в 13:18
Ой, извините, мало осталось :)
 – 
T.G
9 Июн 2014 в 13:19

В качестве альтернативы, чтобы избежать путаницы между индексом элемента массива и счетчиком элементов, переключитесь на использование цикла foreach.

   //counting the elements
    int i = 1;
    for (int number : numbers) {
      //prints each element value with 4 spaces in between
      System.out.printf("%4d", number);

      //once line reaches ten values; print new line
      if (i % 10 == 0) {
        System.out.println();
      }

      i++;
    }
0
darrenmc 9 Июн 2014 в 13:24