【问题标题】:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3090 >= 3090 at java.util.Vector.elementAt线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 3090 >= 3090 at java.util.Vector.elementAt
【发布时间】:2013-02-14 10:49:35
【问题描述】:

我明白了

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);

【问题讨论】:

  • 这段代码是我见过的最丑的。我见过一些!另外,抛出错误的确切行是哪条?一些建议:1,使用有意义的名称,2,使用命名约定:以大写字母 3 开头的 CamelCased 类名,在循环块主体周围使用括号......(另外,一个小建议,因为我不知道代码环境:谨慎使用公共变量,并且仅在上下文要求时使用。)
  • @TedHopp:这是 java.util.Vector 中的第 470 行。需要完整的堆栈跟踪。

标签: java arrays libsvm


【解决方案1】:

vy.size() 用于确定循环的边界,然后访问vxvyvx 似乎比 vy 短,导致显示异常。

【讨论】:

【解决方案2】:

当它从 0 迭代到 vy.size() - 1 时,您使用 i 来索引 vx。如果 vy 大于 vx 这将导致类似于您所拥有的异常。

【讨论】:

    【解决方案3】:

    prob.lvy 的大小,你还需要找到vx 的大小。

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

    【讨论】:

      【解决方案4】:

      你在 vx 上从 0 循环到 prob.l-1,但是 prob.l 是基于 vy 的大小,看起来更大。

      【讨论】:

        猜你喜欢
        • 2012-08-13
        • 1970-01-01
        • 2014-11-14
        • 2011-07-07
        • 1970-01-01
        • 2012-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多