Я пытаюсь написать цикл for для следующего целочисленного массива. Размер массива 10. Я написал два цикла. первый цикл увеличит значение, а второй цикл напечатает результат, например, элемент 1 равен 10, элемент 2 равен 20. Но я все время получаю 0. Я привел предыдущий код, в котором все было хорошо. По причине тестирования я хотел бы реализовать расширенный цикл for. Но я застрял с двумя проблемами: как увеличить значение и как определить длину массива. Вот мой код.
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]);
}
ты не задавал вопроса
num*10 всегда является 0, потому что это значение по умолчанию для ints. Вы не поместили никаких элементов в свой массив, поэтому каждый элемент - это 0При инициализации значение int по умолчанию равно 0. Вы умножаете 0 на что угодно, и он вернет 0
@SudheeshSinganamalla Я хочу написать array.lengh, но как я могу написать это в расширенном цикле for
Вы хотите иметь массив на основе значения индекса? {0,1,2....,9} и умножить каждое значение в нем на 10?
нет у меня нет значения индекса
То, что он называется «улучшенным», не означает, что он лучше для всего. Очевидно, что ваши требования намного лучше обслуживаются простым использованием обычного цикла for с переменной счетчика взаимодействий, поэтому просто используйте это.
@SudheeshSinganamalla Я дал свой предыдущий код. Теперь я хочу реализовать то же самое в улучшенном цикле for. Но у меня всегда 0. предыдущий код работает нормально. Как я могу сделать это в расширенном цикле for




Это простая математика. 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;
}
Понятия не имею, почему я получаю здесь голоса против. Для шутки? Это жизнеспособный ответ
1-й случай: число никогда не увеличивается, 2-й случай: число никогда не устанавливается и не увеличивается. Вероятно, почему вы проиграли
Это правильно! спасибо :) объяснение правильное, и это была моя вина. Я все еще не думаю, что заслуживаю 5 голосов против без единого слова. бу все равно;)
следующее редактирование: 1rst элемент не установлен в обоих случаях, оба случая вызовут исключение ArrayOutOfBoundException
Все они возвращают ноль, потому что при построении массива значение по умолчанию для каждого int в массиве равно нулю. Затем вы умножаете это на десять. Что все равно вернется как ноль. Перед использованием цикла for необходимо заполнить массив.
Обновлено:
После просмотра ваших правок я предлагаю не использовать для этого расширенный цикл for. Улучшенный цикл for - хороший инструмент при использовании в правильных ситуациях. Это автоматически не лучше, чем обычный цикл for, и решение, какой из них использовать, должно зависеть от ситуации.
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);
}
Я дал свой предыдущий код, где все было хорошо. теперь я хочу написать это в расширенном цикле for. но я не смог добиться успеха
Для начала нужно заполнить массив индексами:
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);
}
}
Хотя я согласен с предыдущими комментаторами, что расширенный цикл не является правильным выбором для работы с индексами массивов.
Для каждого будет скрывать индексную переменную в случае, если зацикленный объект является массивом. В случае, если объект, по которому выполняется цикл, имеет тип итерируемый, тогда реализация цикла for скрывает итератор. Поэтому, если это массив, а внутри цикла требуется индекс, тогда лучше использовать цикл с индексами массива.
Итак, для каждого написано так:
for(Integer num: myIntArray){
myIntArray[num]=num*10;
}
Аналогично приведенному ниже, в случае ur:
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]);
}
num*10<- Как вы думаете, каково начальное значениеnum? Это0, и поэтому все, что вы делаете, это умножаете что-то на0.