2013-02-28 65 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的大小,該大小似乎更大。

相關問題