исключение Java ArrayIndexOutOfBoundsException 0

Я получаю ArrayIndexOutOfBoundException здесь. Что мне не хватает?

Мой код ниже:

public class Exercise {

    public static double[] strfloat(String str){
        double[] f = new double[] {};
        String[] st = new String[] {};
        st= str.split(" "); 
        for(int i = 0; i < st.length; i++){ 
            System.out.println(st[i]); 
            f[i] = Double.parseDouble(st[i]);
            System.out.println(f[i]);
        }
        return f;
    }

    public static void main(String[] args) {
        String str = "1.99999996e-002 7.49999983e-003 0. 1.75000001e-002 9.99999978e-003";
        double[] retstr = strfloat(str);

        for(int i = 0; i < retstr.length; i++){
            System.out.println(retstr[i] + " ");
        }
    }

person Shah    schedule 24.05.2013    source источник
comment
double[] f = new double[st.length] -- Используйте это   -  person Ketan    schedule 24.05.2013


Ответы (7)


Попробуйте сделать это:

String[] st = str.split(" ");
double[] f = new double[st.length];

Таким образом, вы инициализируете массив f размером фрагментов строки.

person darijan    schedule 24.05.2013

double[] f = new double[] {};

пуст, и вы ссылаетесь на его (несуществующие) элементы.

System.out.println(f[i]);

Прежде чем печатать f[i], убедитесь, что он вообще существует.

Вы можете исправить это так:

String[] st = str.split(" ");
double[] f = new double[st.length];
person Konstantin Yovkov    schedule 24.05.2013

сделай это

String[] st = new String[]{};

st= str.split(" ");

double[] f = new double[st.length()];

Причина

Исключение ArrayIndexOutOfBoundsException вызывается, чтобы указать, что к массиву был осуществлен доступ с использованием недопустимого индекса. Индекс либо отрицателен, либо больше или равен размеру массива.

Здесь вы инициализировали двойной массив f пустым константным инициализатором. поэтому длина f равна 0. Но вы пытаетесь получить доступ к f[i]. Вот почему возникла проблема

person stinepike    schedule 24.05.2013

Здесь вы создаете пустой массив:

double[] f = new double[] {};

Создайте свой массив, используя st.length, после разделения. Так вы получите нужный размер.

person Diogo Moreira    schedule 24.05.2013

здесь исключение arrayoutofbound. Что мне не хватает?

Вы пропустили конец f...

double[] f = new double[] {};

[...]
for(int i=0; i<st.length; i++){
    [...]
    f[i] = Double.parseDouble(st[i]);

f имеет длину 0, поэтому вы превышаете его длину при попытке доступа к f[0]

немного переделайте свой код:

String[] st = st= str.split(" ");
double[] f = new double[st.length];
person Marco Forberg    schedule 24.05.2013

Инициализируйте массив f:

    double[] f = new double[st.length];

Теперь вы можете задаться вопросом, почему вам не нужно делать это с st, если вы объявили его аналогичным образом? На самом деле нет необходимости создавать экземпляр st, как вы это сделали, потому что str.split() все равно возвращает другой экземпляр массива!

    String[] st = str.split(" ");
person Balázs Németh    schedule 24.05.2013

Вам нужно инициализировать двойной массив f. Попробуй это.

double[] f = new double[st.length].

В вашем коде:

public static double[] strfloat(String str) {
        String[] st = new String[]{};
        st = str.split(" ");
        double[] f = new double[st.length];
        for (int i = 0; i < st.length; i++) {
            System.out.println(st[i]);
            f[i] = Double.parseDouble(st[i]);
            System.out.println(f[i]);
        }
        return f;
    }

    public static void main(String[] args) {

        String str = "1.99999996e-002 7.49999983e-003 0. 1.75000001e-002 9.99999978e-003";
        double[] retstr = strfloat(str);
        for (int i = 0; i < retstr.length; i++) {
            System.out.println(retstr[i] + " ");
        }
    }
person Prabhakar Manthena    schedule 24.05.2013
comment
если моя строка содержит [, как я могу игнорировать это. например. ул = [ 1.99999996e-002 ... ]. Я попробовал это с этим кодом, но получил некоторые ошибки. Код: for(int i=0; i‹st.length; i++){ if!(st[i].equals([) ||(st[i].equals(]))){f[i]= Double.parseDouble(ст[я]); } } - person Shah; 24.05.2013
comment
Я исправляю проблему. спасибо - person Shah; 24.05.2013