Выключэнне 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] + " ");
        }
    }
1
двайны [] F = новы двайны [st.length] - Выкарыстоўвайце гэты
дададзена аўтар Ketan, крыніца

7 адказы

Паспрабуйце зрабіць гэта:

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

Такім чынам, вы ініцыялізаваць масіў е на памер радка кавалкі.

2
дададзена

зрабіць гэта

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

st= str.split(" ");

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

<�Моцны> Прычына гэтага

<�Р> ArrayIndexOutOfBoundsException з'яўляецца Кінуты, каб паказаць, што масіў быў даступны   з некарэктным індэксам. Індэкс альбо адмоўны або больш або   роўнага памеру масіва

Тут вы наладзіце двайны масіў ф з пустым пастаянная инициализатором. таму даўжыня е роўна 0. Але вы спрабуеце Асесс п [я]. Вось чаму паўстала праблема

1
дададзена

The

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

пуста, і вы гэта спасылкі (неіснуючыя) элементы.

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

Перад тым, як надрукаваць F [I] , пераканайцеся, што ён наогул існуе.

Вы можаце выправіць гэта так:

String[] st = str.split(" ");
double[] f = new double[st.length];
1
дададзена

Ініцыялізаваць е масіва:

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

Цяпер вы можаце задацца пытаннем, чаму вы не павінны рабіць гэта й калі вы абвясцілі яго падобным чынам? На самай справе, гэта не трэба, каб стварыць асобнік й , як вы рабілі, таму што str.split() вяртае іншы асобнік масіва ў любым выпадку!

    String[] st = str.split(" ");
0
дададзена

Вы ствараеце пусты масіў тут:

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

Стварыце свой масіў, выкарыстоўваючы st.length, пасля расколу. Такім чынам, вы будзеце мець памер вы хочаце.

0
дададзена

Вы павінны ініцыялізаваць двайны масіў е . Паспрабуйце гэта.

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] + " ");
        }
    }
0
дададзена
калі мая радок утрымлівае «[», як я магу гэта ігнараваць. напрыклад. вул = "[1.99999996e-002 ...]". Я спрабаваў гэты код, але атрымліваюць некаторыя памылкі. Код: для (INT I = 0; я
дададзена аўтар Shah, крыніца
Я вырашыць гэтую праблему. дзякуй
дададзена аўтар Shah, крыніца
<�Р> arrayoutofboundexception тут. Што мне не хапае?

Вы прапусціце канец ф ...

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

[...]
for(int i=0; i

е мае даўжыню 0, так што вы перавышае яго даўжыню пры спробе атрымаць доступ да п [0]

змяніць код няшмат:

String[] st = st= str.split(" ");
double[] f = new double[st.length];
0
дададзена