Неверный вывод массива

Почему при выводе всех индексов кроме последнего, вместо введенного числа выводит 0?
И как это исправить?

Можете использовать пример:

2 7 8
import java.util.Scanner;
    
public class MyClass {
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        int n = 0; 
        n = scan.nextInt(); 
        int nums[] = new int[100];
        for (int i = 0; i < n; i++){
            nums = new int[n];
            nums[i] = scan.nextInt();
        }
        for (int i = 0; i < n; i++){
            System.out.println(nums[i]);
        }
    }
}

Ответы (1 шт):

Автор решения: Михаил Ребров

Все дело в данной строке

nums = new int[n];

В цикле после ввода каждой последующей цифры Вы просто создаёте заново новый массив.
Соответственно каждую новую итерацию Вы стираете ранее введенные значения.
И в массиве nums храниться только последнее введенное число.
Нули выводятся, же потому что ими инициализируется массив int[] при его создании.

Просто удалите или закомментируйте эту строку.

Замечания:

int nums[] = new int[100];

Вы строкой выше Вы ввели размер массива и позже создаёте массив с размером 100.

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

Лучше сразу инициализировать массив с реальным размером:

    int nums[] = new int[n];

Далее Вы сможете итерировать массив следующим образом:

for (int i = 0; i < nums.length; i++){
   //...
}

Таким образом Вы сможете корректно работать с массивом не зная значения переменной n.
Это Вам может понадобится, когда вы передаете данный массив в качестве параметра в другой метод.

А когда при итерации Вам нужны только значения(без индексов) можно поступить еще проще:

for (int number : nums){
    // ...
} 

Так можно поступить во втором случае при выводе массива:

for (int number : nums){
    System.out.println(number);
}

Итого:

import java.util.Scanner;

public class MyClass {
    public static void main(String args[]) {
        System.out.println("Введите размер массива:");
        Scanner scan = new Scanner(System.in);
        int n = 0;
        n = scan.nextInt();
        System.out.println("Введите размер значения:");
        int nums[] = new int[n];
        for (int i = 0; i < nums.length; i++){
            // nums = new int[n];
            nums[i] = scan.nextInt();
        }
        System.out.println("Вы ввели следующие значения:");
        for (int number : nums){
            System.out.println(number);
        }
    }
}
→ Ссылка