异常Java ArrayIndexOutOfBoundsException 0

时间:2013-05-24 13:21:49

标签: java arrays indexoutofboundsexception

我在这里得到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] + " ");
        }
    }

7 个答案:

答案 0 :(得分:2)

尝试这样做:

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

以这种方式,您将数组f初始化为字符串块的大小。

答案 1 :(得分:1)

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

为空,您引用了它(不存在的)元素。

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

在打印f[i]之前,请确保它已存在。

你可以这样修理:

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

答案 2 :(得分:1)

这样做

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

st= str.split(" ");

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

此背后的原因

  

抛出ArrayIndexOutOfBoundsException以指示已访问数组   有非法索引。该指数为负数或大于或   等于数组的大小

这里用空的常量初始化器初始化了双数组f。所以f的长度是0.但是你正试图接受f [i]。这就是问题出现的原因

答案 3 :(得分:0)

初始化f数组:

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

现在你可能想知道为什么如果你以类似的方式声明它,你不必对st这样做? 事实上,没有必要像你一样实例化st,因为str.split()无论如何都会返回一个不同的数组实例!

    String[] st = str.split(" ");

答案 4 :(得分:0)

你在这里创建一个空数组:

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

在拆分后使用st.length创建数组。这样你就可以得到你想要的尺寸。

答案 5 :(得分:0)

  

arrayoutofboundexception here。我错过了什么?

你错过了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];

答案 6 :(得分:0)

您需要初始化双数组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] + " ");
        }
    }