Неверный вывод массива
Почему при выводе всех индексов кроме последнего, вместо введенного числа выводит 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);
}
}
}