Вывести элементы массива с 10 элементами в каждой строке - PullRequest
2 голосов
/ 18 апреля 2010

Я только что создал массив с 100 инициализированными значениями, и я хочу распечатать 10 элементов в каждой строке, чтобы это было примерно так

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16
...26

это код, который я использовал, и мне удалось сделать это для первых 10 элементов, но я не мог понять, как сделать это для остальных

public static void main(String[] args) {

    int[] numbers = { 0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};  
    int i, count = 0;

    for (i = 0; i < numbers.length; i++) {

        System.out.print(numbers[i] + " ");
        count++;

        if (count == 9)
            for (i = 9; i < numbers.length; i++)
                System.out.println(numbers[i] + " ");
    }
}

Ответы [ 3 ]

5 голосов
/ 18 апреля 2010
    int[] numbers = new int[100];
    for (int i = 0; i < numbers.length; i++) {
        if (i % 10 == 0 && i > 0) {
            System.out.println();
        }
        System.out.print(numbers[i] + " ");
    }

Печать новой строки перед печатью numbers[i], где i % 10 == 0 и i > 0. % - мод-оператор; возвращает остаток, если i / 10. Так что i % 10 == 0 когда i = 0, 10, 20, ....


Что касается вашего исходного кода, вы можете заставить его работать с небольшими изменениями следующим образом:

int count = 0;
for (int i = 0; i < numbers.length; i++) {
   System.out.print(numbers[i] + " ");
   count++;
   if (count == 10) {
     System.out.println();
     count = 0;
   }
}

По сути, count - это количество цифр, напечатанных в этой строке. Как только он достигает 10, вы печатаете новую строку, а затем сбрасываете ее обратно на 0 , потому что вы начинаете новую строку, и для этой строки вы еще не напечатали никаких чисел (пока).


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

static void print(int[] arr, int W, String hSep, String vSep) {
    for (int i = 0; i < arr.length; i++) {
        String sep =
            (i % W != 0) ? hSep :
            (i > 0)      ? vSep :
            "";
        System.out.print(sep + arr[i]);
    }
    System.out.println(vSep);
}

Если вы скажете это, скажем, как print(new int[25], 5, ",", ".\n");, то будет напечатано 25 нулей, по 5 в каждой строке. Точка (.) в конце каждой строки и запятая (,) между нулями в строке.

3 голосов
/ 18 апреля 2010

Почему вы используете 2 вложенных цикла, когда вам нужно только запомнить, в каких местах вам нужно вывести перенос строки? Также использование одной и той же переменной i для обоих циклов не даст ожидаемого результата.

Как насчет:

for (i = 0; i < numbers.length; i++) {

    System.out.print(numbers[i] + " ");
    count++;

    if (count == 10)
        System.out.print("\n");
        count = 0;
    }
}
1 голос
/ 18 апреля 2010

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

for (i = 0; i < numbers.length; ++i)
{
    System.out.print(number[i]);
    if (i % 10 == 9)
    {
        System.out.println();
    }
    else
    {
        System.out.print(" ");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...