Java数组索引越界异常处理

Java数组索引越界异常处理,java,indexoutofboundsexception,Java,Indexoutofboundsexception,给定以下Java代码: int test = createIntData(Column[8]); private int createIntData (String realData) { if (realData == null) { return (int) (Math.random()*100); } else { return Integer.parseInt(realData); } } 这会引发如下异常: 线程“m

给定以下Java代码:

int test = createIntData(Column[8]);

private int createIntData (String realData) {
    if (realData == null) {
        return (int) (Math.random()*100); 
    }
    else {
        return Integer.parseInt(realData);
    }
}
这会引发如下异常:

线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常 这是因为参数的最大索引只有4。那么如何改变程序来实现这样的功能:一旦参数超出索引,返回值:

Math.random() * 100

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

int test = createIntData(Column[8]);
到(使用)

int test=createIntData((8
有两个严重问题:

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

Column[] array = new Column[someCapacity];
//fill the array

int i = 8;

if( i < array.length && i > -1 ){
    int test = createIntData(array[i]);
}
Column[]数组=新列[someCapacity];
//填充数组
int i=8;
if(i-1){
int test=createIntData(数组[i]);
}

2.数组的类型(
)与
createIntData()
输入参数(
字符串
)不匹配。

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

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

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

问题出在
列[8]
。这与您的
createIntData
方法无关,真的。在调用方法之前对参数进行求值-因此,如果对参数求值失败(就像这里所做的那样),则该方法对此无能为力。@jonsket
Column[8]
arrayindexoutofbounds异常:10
不适合如何验证Column[8]首先,如果它超出了索引,就用它做些什么?@jonskeet忘记数字“10”,因为我没有完整复制我的代码@task在Java中,命名约定规定变量以小写字母开头。这使得快速区分类型和变量更容易。从SME_Dev的回答中可以看出,不遵守这一惯例确实会让人感到厌烦。
realData
应该是
values[index]
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);