Улучшено для цикла Java - PullRequest
       3

Улучшено для цикла Java

0 голосов
/ 25 апреля 2018

Я пытаюсь написать цикл for для следующего целочисленного массива.Размер массива равен 10. Я написал два цикла.первый цикл увеличит значение, а второй цикл напечатает результат, как Элемент 1 равен 10, Элемент 2 равен 20. Но я получаю 0 все время.Я дал предыдущий код, где все было хорошо.Для тестирования я хотел бы реализовать расширенный цикл for.Но я застрял с 2 проблемами, как можно увеличить значение и как я могу определить длину массива.Вот мой код.

public static void main(String[] args) {

    int[] myIntArray = new int[10];

    for(Integer num: myIntArray){
        myIntArray[num]=num*10;
    }

    for(int num:myIntArray){
        System.out.println("Element " + num + ", value is " + myIntArray[num]);

    }
}

Предыдущий код

 int[] myIntArray =new int[10];

    for(int i =0; i<myIntArray.length;i++){
        myIntArray[i]=i*10;
    }
    for(int i=0;i<myIntArray.length;i++){
        System.out.println("Element " + i + ", value is " + myIntArray[i]);
    }

Ответы [ 5 ]

0 голосов
/ 25 апреля 2018

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

Итак, для каждого написано так:

for(Integer num: myIntArray){
  myIntArray[num]=num*10;
}

Аналогично приведенному ниже, в вашем случае:

for(int i =0; i<myIntArray.length;i++){
        myIntArray[i]=myIntArray[i]*10;
} 

И не используйте значение в массиве для индексации в сторону для каждого, так как он выбрасывает индекс за исключением исключительной ситуации, если значение оказывается> = длиной массива. Здесь это не так, поскольку значение в массиве имеет тип int, и все они инициализируются значением 0, которое меньше длины массива, 10.

for(int num:myIntArray){
    System.out.println("Element " + num + ", value is " + myIntArray[num]);
}
0 голосов
/ 25 апреля 2018

Сначала вы должны заполнить массив индексами:

    Arrays.setAll(myIntArray, i -> i);

И после этого во время вывода вы не должны пытаться получить значение как myIntArray[num], потому что при использовании расширенного цикла for у вас уже есть значение,но не имеют своего индекса.Таким образом, код результата должен выглядеть примерно так:

public static void main(String[] args) {
    int[] myIntArray = new int[10];

    Arrays.setAll(myIntArray, i -> i);

    for(Integer num: myIntArray){
        myIntArray[num]=num*10;
    }

    for(int num : myIntArray){
        System.out.println("Element " + num/10 + ", value is " + num);

    }
}

Хотя я согласен с предыдущими комментариями, что расширенный цикл не является правильным выбором для работы с индексами массива.

0 голосов
/ 25 апреля 2018

Все они возвращают ноль, потому что при создании массива значение по умолчанию для каждого целого в массиве равно нулю. Тогда вы умножаете это на десять. Который все еще вернется как ноль. Вам необходимо заполнить массив, прежде чем использовать цикл for.

EDIT:

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

0 голосов
/ 25 апреля 2018

int[] myIntArray =new int[10]; вы создаете экземпляр массива из 10 элементов, и все эти элементы равны 0.

вот почему здесь:

for(Integer num: myIntArray){
    myIntArray[num]=num*10;
}

вы делаете больше как 0 * 10, что равно 0. Чтобы исправить это:

for(int i=0; i<myIntArray.length;i++){
    myIntArray[i]=i*10;
}

и для отображения:

for(int num:myIntArray) {
    System.out.println("Element " + num + ", value is " + num);
}
0 голосов
/ 25 апреля 2018

Это простая математика. 0 * 10 = 0;)

Ваш массив int не инициализирован, и значение по умолчанию для примитива int равно 0. Если вы хотите предварительно установить для него значения, основанные на индексе, вам нужно выполнить итерацию по массиву с использованием индекса или добавить его в цикл.

int index=0;
for(Integer num: myIntArray){
    myIntArray[index]=(++index)*10;

}

или

for(int index=0;index<myIntArray.length;i++){
    myIntArray[i]=(i+1)*10;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...