2013-02-28 64 views
0

我得到异常在线程 “主” java.lang.ArrayIndexOutOfBoundsException:3090> = 3090在java.util.Vector.elementAt

exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3090 >= 3090 
    at java.util.Vector.elementAt(Vector.java:470) 

当我运行片的下面的代码。任何帮助欢迎。

prob = new svm_problem(); 
prob.l = vy.size(); 
prob.x = new svm_node[prob.l][]; 
for(int i=0;i<prob.l;i++) 
    prob.x[i] = vx.elementAt(i); 
prob.y = new double[prob.l]; 
for(int i=0;i<prob.l;i++) 
    prob.y[i] = vy.elementAt(i); 
+0

此代码是我见过的最丑的代码。我见过一些!另外,这是**确切的线**错误是抛出?一些建议:1,使用有意义的名字,2,使用命名约定:以大写字母3开头的CamelCased类名,在循环块体周围使用括号......(另外,还有一个小建议,因为我不知道代码环境:谨慎使用公共变量,并且仅在上下文要求时使用。) – ppeterka 2013-02-28 09:49:51

+1

@TedHopp:它是java.util.Vector中的第470行。完整的堆栈跟踪是必需的。 – 2013-02-28 09:50:32

回答

1

vy.size()用于确定您的循环的界限,然后同时访问vxvy。看起来vxvy短,导致出现异常。

+0

此代码是svm_train.java中libsvm-3.16软件包的一部分。当我在这个博客后面训练数据集时https://mrtextminer.wordpress.com/2008/03/03/a-practice-on-libsvm-example-in-debian-etch-using-java/#comment-535这个例外发生 – 2013-02-28 10:40:05

0

您可以使用i来索引vx,同时它会从0重复到vy.size() - 1。如果vy大于vx,则会导致类似于您拥有的异常。

0

prob.l的尺寸为vy,您还需要查找vx的尺寸。

for(int i=0;i<vx.size();i++) 
    prob.x[i] = vx.elementAt(i); 
0

您将vx从0循环到prob.l-1,但prob.l基于vy的大小,该大小似乎更大。

相关问题