我的代码结构是否有任何问题导致我出错? 我想我修复了我的for循环和参数,现在一切都很好,但我仍然遇到错误?
public static int indexOf(int[] list, int searchValue) throws BadArrayException
{
int indexValue = 0;
if(list == null)
throw new BadArrayException("Array is null");
else if((list.length) == 0)
return -1;
for(int i = 0; i < (list.length); i++){
if(list[i] == searchValue)
indexValue = i;
}
return indexValue;
}
public static int lastIndexOf(int[] list, int searchValue) throws BadArrayException
{
int indexValue = 0;
int last = (list.length-1);
if(list.length == 0)
return -1;
for(int i = last; i >= 0; i--){
if(list[i] == searchValue)
indexValue = i;
}
return indexValue;
}
}
我得到的是什么:
测试ArrayUtils类异常处理 - 2014年2月2日
---测试minValue方法---
获取null数组的minVal OK - minValue抛出null数组的异常:BadArrayException
获取空数组的minVal OK - minValue为空数组抛出异常:BadArrayException
获得minVal():[10] 好的 - 预期minValue返回10并得到:10
获得minVal():[20,30] 好的 - 预期的minValue返回20并得到:20
获得minVal():[40,30] 好的 - 预期的minValue返回30并获得:30
获得minVal():[10,10] 好的 - 预期minValue返回10并得到:10
获得minVal():[15,25,35] 好的 - 预期minValue返回15并得到:15
获得minVal():[25,20,30] 好的 - 预期的minValue返回20并得到:20
获得minVal():[50,40,30] 好的 - 预期的minValue返回30并获得:30
获得minVal():[50,-10,40,-25,50,40,30] 好的 - 预期minValue返回-25并得到:-25
获得minVal():[200,50,-40,60,-15,30,75] 好的 - 预期minValue返回-40并得到:-40
---测试copyRange方法---
获取null数组的copyRange 好的 - copyRange引发了null数组的异常:BadArrayException
获取:[]的copyRange(list,-1) 好的 - copyRange抛出异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:-1
获取:[]的copyRange(list,0) 好的 - copyRange正确地将数组复制为[]
获取copyRange(list,1):[] 好的 - copyRange抛出异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:1
获取:[20]的copyRange(list,-1) 好的 - copyRange抛出异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:-1
获取:[20]的copyRange(list,0) 好的 - copyRange正确复制了数组[20]
获取copyRange(list,1):[20] 好的 - copyRange正确地将数组复制为[]
获取copyRange(list,2):[20] 好的 - copyRange抛出异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:2
获取copyRange(list,-1):[10,15] 好的 - copyRange抛出异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:-1
获取copyRange(list,0):[10,15] 好的 - copyRange正确地将数组复制为[10,15]
获取copyRange(list,1):[10,15] OK - copyRange正确复制了数组[15]
获取copyRange(list,2):[10,15] 好的 - copyRange正确地将数组复制为[]
获取copyRange(list,3):[10,15] 好的 - copyRange抛出异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:3
获取copyRange(list,-1):[30,35,40,45,50] 好的 - copyRange抛出异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:-1
获取copyRange(list,0):[30,35,40,45,50] 好的 - copyRange正确地将数组复制为[30,35,40,45,50]
获取copyRange(list,1):[30,35,40,45,50] 好的 - copyRange正确地将数组复制为[35,40,45,50]
获取copyRange(list,2):[30,35,40,45,50] 好的 - copyRange正确地将数组复制为[40,45,50]
获取copyRange(list,3):[30,35,40,45,50] 好的 - copyRange正确地将数组复制为[45,50]
获取copyRange(list,4):[30,35,40,45,50] 好的 - copyRange正确地将数组复制为[50]
获取copyRange(list,5):[30,35,40,45,50] 好的 - copyRange正确地将数组复制为[]
获取copyRange(list,6):[30,35,40,45,50] 好的 - copyRange抛出异常java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:6
---测试indexOf和lastIndexOf方法---
获取null数组的indexOf OK - indexOf抛出了null数组的异常:BadArrayException
获取空数组的lastIndexOf 错误 - lastIndexOf引发了一个意外的异常:java.lang.NullPointerException
获取indexOf(5):[] OK - 期望indexOf返回-1并得到:-1
获取lastIndexOf(5):[] 好的 - 期望lastIndexOf返回-1并得到:-1
获取indexOf(20):[20] OK - 期望indexOf返回0并得到:0
获取indexOf(25):[20] 错误 - 期望indexOf返回-1但得到:0
获取lastIndexOf(20):[20] 好的 - 期望lastIndexOf返回0并得到:0
获取lastIndexOf(25):[20] 错误 - 期望lastIndexOf返回-1但得到:0
获取indexOf(5):[5,10,15,20,10,15,5,10,15,20] 错误 - 期望indexOf返回0但得到:6
获得indexOf(10):[5,10,15,20,10,15,5,10,15,20] 错误 - 预期指数返回1但得到:7
获取indexOf(15):[5,10,15,20,10,15,5,10,15,20] 错误 - 预期指数返回2但得到:8
获取indexOf(20):[5,10,15,20,10,15,5,10,15,20] 错误 - 预期指数返回3但得到:9
获取indexOf(0):[5,10,15,20,10,15,5,10,15,20] 错误 - 期望indexOf返回-1但得到:0
获取lastIndexOf(5):[5,10,15,20,10,15,5,10,15,20] 错误 - 期望lastIndexOf返回6但得到:0
获取lastIndexOf(10):[5,10,15,20,10,15,5,10,15,20] 错误 - 期望lastIndexOf返回7但得到:1
获取lastIndexOf(15):[5,10,15,20,10,15,5,10,15,20] 错误 - 期望lastIndexOf返回8但得到:2
获取lastIndexOf(20):[5,10,15,20,10,15,5,10,15,20] 错误 - 期望lastIndexOf返回9但得到:3
获取lastIndexOf(0):[5,10,15,20,10,15,5,10,15,20] 错误 - 期望lastIndexOf返回-1但得到:0
完成 - 按回车键结束程序
这些都应该没有错误 我是否错误地接近此代码? 对不起,我之前询问过这个问题,但没有以正确的方式提出
答案 0 :(得分:2)
您遗失的一件事是lastIndexOf
中对数组的空检查。
但主要的错误是,一旦找到第一个匹配,你就不会突破循环(两种方法都是如此)。
哦,int indexValue = 0;
错了。您应该将其初始化为-1(因为这是表示“未找到”的值)。
考虑到所有这些因素,我认为这应该有效:
public static int indexOf(int[] list, int searchValue) throws BadArrayException
{
int indexValue = -1;
if(list == null)
throw new BadArrayException("Array is null");
else if((list.length) == 0)
return -1;
for(int i = 0; i < (list.length); i++){
if(list[i] == searchValue) {
indexValue = i;
break;
}
}
return indexValue;
}
public static int lastIndexOf(int[] list, int searchValue) throws BadArrayException
{
int indexValue = -1;
if(list == null)
throw new BadArrayException("Array is null");
int last = (list.length-1);
if(list.length == 0)
return -1;
for(int i = last; i >= 0; i--){
if(list[i] == searchValue) {
indexValue = i;
break;
}
}
return indexValue;
}
}
答案 1 :(得分:1)
代码有三个问题,
list
函数上名为lastIndexOf
的参数的 NULL 验证。如果您汇总该验证,则可以避免错误:错误 - lastIndexOf引发了意外异常:java.lang.NullPointerException
indexValue
而不是-1
初始化var 0
,以避免:错误 - 期望indexOf返回-1但得到:0
searchValue
的第一个发生,就必须返回索引i
。通过此更改,您将避免以下错误:错误 - 预期indexOf返回2但得到:8
通过这三项更改,您的代码必须如下所示:
public static int indexOf(int[] list, int searchValue) throws BadArrayException
{
int indexValue = -1;
if(list == null)
throw new BadArrayException("Array is null");
//Not neccessary
/*else if((list.length) == 0)
return -1;*/
for(int i = 0; i < (list.length); i++){
if(list[i] == searchValue)
return i;
}
return indexValue;
}
public static int lastIndexOf(int[] list, int searchValue) throws BadArrayException
{
int indexValue = -1;
if(list == null)
throw new BadArrayException("Array is null");
int last = (list.length-1);
//Not neccessary
/*if(list.length == 0)
return -1;*/
for(int i = last; i >= 0; i--){
if(list[i] == searchValue)
return i;
}
return indexValue;
}
请注意,如果indexValue
初始化为-1
,则不再需要对代码进行一些验证。
最后,我建议您使用一些调试工具或用纸和笔运行代码,以发现错误的原因。
希望能帮到你。 此致!
答案 2 :(得分:0)
当你找到这个值时,你应该从循环中断开:
for(int i = 0; i < (list.length); i++){
if(list[i] == searchValue) {
indexValue = i;
**break;**
}
}