Java数组索引越界异常处理
给定以下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
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
方法无关,真的。在调用方法之前对参数进行求值-因此,如果对参数求值失败(就像这里所做的那样),则该方法对此无能为力。@jonsketColumn[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);