【问题标题】:Java Array Index Out of Bounds Exception ProcessingJava 数组索引越界异常处理
【发布时间】:2014-10-15 13:45:30
【问题描述】:

给定以下 Java 代码:

int test = createIntData(Column[8]);

private int createIntData (String realData) {
    if (realData == null) {
        return (int) (Math.random()*100); 
    }
    else {
        return Integer.parseInt(realData);
    }
}

这样会抛出异常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException

这是因为参数只有最大索引4。那么如何改变程序实现功能:一旦参数超出索引,返回值:

Math.random() * 100

【问题讨论】:

  • 问题出在Column[8]。这与您的 createIntData 方法无关,真的。参数在方法被调用之前被评估 - 所以如果评估参数失败(就像它在这里所做的那样),那么该方法将无能为力。
  • @JonSkeet Column[8]ArrayIndexOutOfBoundsException: 10 不适合
  • 那么如何首先验证 Column[8] 并在它超出索引时对其进行处理?@JonSkeet
  • 忘记数字“10”,因为我没有完整复制我的代码。 @TAsk
  • 在 Java 中,命名约定规定变量以小写字母开头。这使得更容易快速区分类型和变量之间的区别。您可以从 SME_Dev 的回答中看到,不遵守这个约定真的会让人们失望。

标签: java indexoutofboundsexception


【解决方案1】:

我会通过传递数组和索引来允许在方法内部进行检查:

public int createIntData(String[] values, int index) {
    if (values != null && index >= 0 && index < values.length) {
        return Integer.parseInt(values[index]);
    }
    return (int) (Math.random()*100);
}

叫它:

int test = createIntData(Column, 8);

这样可以使用任何输入安全地调用该方法(不过,我在 parseInt 中留下了潜在的异常)

【讨论】:

  • realData 应该是values[index]
【解决方案2】:

如果8 超出Column 的长度范围,则会出现该错误。改变这个

int test = createIntData(Column[8]);

到(使用ternary

int test = createIntData((8 < Column.length) ? Column[8] : null);

【讨论】:

    【解决方案3】:

    有两个严重的问题:

    1.您应该检查给定的数组索引是否存在:

    Column[] array = new Column[someCapacity];
    //fill the array
    
    int i = 8;
    
    if( i < array.length && i > -1 ){
        int test = createIntData(array[i]);
    }
    

    2.数组的类型(Column)与createIntData()输入参数不匹配(String

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多