Я пытаюсь установить массив чисел желаемой длины. Он должен получить числа от пользователя, но после получения первого числа выдает ошибку исключения. Может ли кто-нибудь помочь мне исправить это, пожалуйста?
import java.util.Scanner;
public class t4NumericalOperations {
Scanner input = new Scanner(System.in);
int n;
double[] numbers = new double[n];
public void readNumbers(){
System.out.println("How many numbers do you want to do caculations on? ");
n = input.nextInt();
System.out.println("Enter your numbers : ");
for(int i=0;i<n;i++){
numbers[i] = input.nextDouble();
}
}
}
class testSum{
public static void main(String[] args) {
t4NumericalOperations col1 = new t4NumericalOperations();
col1.readNumbers();
col1.calculate();
col1.display();
}
}
Вывод такой:
How many numbers do you want to do caculations on?
2
Enter your numbers :
1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at exercises1.ch4.t4NumericalOperations.readNumbers(t4NumericalOperations.java:15)
at exercises1.ch4.testSum.main(t4NumericalOperations.java:36)
Ваш массив создается до того, как вы прочтете n.
Но если я создам массив после прочтения, как я могу использовать этот массив в других методах этого класса?
Это хорошая ссылка, но она показывает только переменные локального массива. Я думаю, что для студентов переход от локальной переменной к переменной экземпляра немного велик. @BackSlash




Вы должны объявить переменную как переменную экземпляра, но выделить массив после считывания числа.
public class t4NumericalOperations {
Scanner input = new Scanner(System.in);
int n;
double[] numbers; // declaration only
public void readNumbers(){
System.out.println("How many numbers do you want to do caculations on? ");
n = input.nextInt();
numbers = new double[n]; // allocate the array here
System.out.println("Enter your numbers : ");
for(int i=0;i<n;i++){
numbers[i] = input.nextDouble();
}
}
}
Согласно вашему коду, вы пытаетесь динамически заполнить количество элементов для массива Double. вместо этого вы можете попробовать этот метод.
double[] numbers ;
public void readNumbers(){
System.out.println("How many numbers do you want to do caculations on? ");
n = input.nextInt();
numbers = new double[n];
System.out.println("Enter your numbers : ");
for(int i=0;i<n;i++){
numbers[i] = input.nextDouble();
}
Вы создаете экземпляр переменной чисел вне метода, который динамически добавляет недопустимый размер массива. Java инициализирует переменную n как 0. Вот почему вы получаете исключение ArrayOutOfBound.
double[] numbers = new double[n];какова ценностьnв пункте этого заявления? Подсказка: это не может быть тот массив, который вы прочитали от пользователя, поскольку экземпляр массива уже создан, когда вы читаете пользовательский ввод.