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