Невозможно заполнить массив числами из ввода в Java

Я пытаюсь установить массив чисел желаемой длины. Он должен получить числа от пользователя, но после получения первого числа выдает ошибку исключения. Может ли кто-нибудь помочь мне исправить это, пожалуйста?

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)
 
double[] numbers = new double[n]; какова ценность n в пункте этого заявления? Подсказка: это не может быть тот массив, который вы прочитали от пользователя, поскольку экземпляр массива уже создан, когда вы читаете пользовательский ввод.
Federico klez Culloca 02.07.2024 15:04

Ваш массив создается до того, как вы прочтете n.

f1sh 02.07.2024 15:04
stackoverflow.com/questions/26266034/…
BackSlash 02.07.2024 15:04

Но если я создам массив после прочтения, как я могу использовать этот массив в других методах этого класса?

Nanika 02.07.2024 15:08

Это хорошая ссылка, но она показывает только переменные локального массива. Я думаю, что для студентов переход от локальной переменной к переменной экземпляра немного велик. @BackSlash

markspace 02.07.2024 16:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны объявить переменную как переменную экземпляра, но выделить массив после считывания числа.

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.

Другие вопросы по теме