По какой-то причине цикл не выводит правильные значения массива - PullRequest
1 голос
/ 12 апреля 2019

У меня проблемы с получением правильного вывода при печати массива. По сути, я пытаюсь установить массив в методе main, а затем отправить этот массив другому методу, который выводит что-то вроде этого:

   89   12   33   7   72   42   76   49
   69   85   61   23

С 3 пробелами справа и началом новой строки печати после 8-го числа. Кажется, достаточно просто, но я получаю что-то вроде этого.

   89
   69   85   61   23

По какой-то причине не выводятся значения между позициями 1 и 7. Это то, что у меня есть.

public class Test
{
    public static void main (String [] args)
    {
        int [] myInches = {89,12,33,7,72,42,76,49,69,85,61,23};
        printArrayValues(myInches);
    }

    public static void printArrayValues(int [] myInchesParam) {
        for (int i = 0; i < 8; i++) {
            System.out.print("   " + myInchesParam[i]);
            System.out.println();
            for (i = 8; i < 12; i++) {
                System.out.print("   " + myInchesParam[i]);
            }
        }
    }
}

Должен ли я использовать вместо этого do-while? Или я все еще могу сделать это с помощью цикла for, и я просто делаю это неправильно?

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Что ж, происходит то, что в цикле i начинается с 0, затем, когда он достигает второго цикла, вы устанавливаете i в 8, и, таким образом, условие i <8 больше не действует.Самым простым решением было бы не вкладывать свои циклы, а вместо этого иметь </p>

    for (int i = 0; i < 8; i++) {
        System.out.print("   " + myInchesParam[i]);
    }
    System.out.println();
    for (i = 8; i < 12; i++) {
            System.out.print("   " + myInchesParam[i]);
    }

.Еще лучше, наверное,

    for (int i = 0; i < 12; i++) {
        System.out.print("   " + myInchesParam[i]);
        if(i==7) {
          System.out.println();
        }
    }
1 голос
/ 12 апреля 2019

Проблема в том, что вы используете одну и ту же переменную в двух вложенных циклах for.Это приведет к остановке внешнего массива после первой итерации и печати только значений во второй строке.

Просто используйте один цикл и напечатайте новую строку, если i > 0 && i % 8 == 0:

public static void printArrayValues(int[] myInchesParam) {
    for (int i = 0; i < myInchesParam.length; i++) {
        if (i > 0 && i % 8 == 0)
            System.out.println();
        System.out.print("   " + myInchesParam[i]);
    }
}

В качестве альтернативы вы можете просто использовать i % 8 === 7 для последующей вставки новой строки:

public static void printArrayValues(int[] myInchesParam) {
    for (int i = 0; i < myInchesParam.length; i++) {
        System.out.print("   " + myInchesParam[i]);
        if (i % 8 == 7)
            System.out.println();
    }
}

Но в некоторых случаях с этим последним решением вы можете получить завершающую новую строку.

1 голос
/ 12 апреля 2019

Есть много способов решить эту проблему, но можно было бы использовать оператор по модулю, чтобы проверить, были ли уже напечатаны 8 записей.Вы добавляете 1 к i, потому что ваш массив проиндексирован 0.

   for (int i = 0; i < myInchesParam.length; i++) {      
        System.out.print(myInchesParam[i] + "   ");
        if((i + 1) % 8 == 0) {
            System.out.println();
        }
   }

EDIT : Преимущество этого метода в том, что он работает для любой длины массива.Некоторые другие предложения не будут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...