-1

我得到了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] + " ");
        }
    }
4

7 回答 7

2

尝试这样做:

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

这样,您将数组初始化f为字符串块的大小。

于 2013-05-24T13:26:07.113 回答
1

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

是空的,您正在引用它的(不存在的)元素。

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

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

你可以这样修复它:

String[] st = str.split(" ");
double[] f = new double[st.length];
于 2013-05-24T13:24:07.813 回答
1

做这个

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

st= str.split(" ");

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

这背后的原因

抛出 ArrayIndexOutOfBoundsException 表示已使用非法索引访问了数组。索引为负数或大于或等于数组的大小

在这里,您已经使用空常量初始化器初始化了双精度数组 f。所以 f 的长度是 0。但是你正在尝试访问 f[i]。这就是问题发生的原因

于 2013-05-24T13:25:25.893 回答
0

arrayoutofboundexception 在这里。我错过了什么?

你错过了结尾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];
于 2013-05-24T13:27:37.617 回答
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] + " ");
        }
    }
于 2013-05-24T13:32:13.923 回答
0

初始化f数组:

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

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

    String[] st = str.split(" ");
于 2013-05-24T13:25:44.337 回答
0

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

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

拆分后使用 st.length 创建数组。这样你就会有你想要的尺寸。

于 2013-05-24T13:25:55.013 回答