因此,对于我的代码的这部分,我想知道为什么我的测试类不起作用。我完全按照说明操作,但我不确定为什么我的错误。 基本上对于这两个部分, 如果数组参数为null,则必须抛出BadArrayException,并显示消息“Array is null”。 如果数组参数的长度为0,则必须返回-1。 它不能更改数组参数内容,也不能将整个数组参数内容复制到另一个数组。 要查找第一个匹配项,它必须搜索一次数组参数。 它不会读取或打印任何内容。
那么我应该先修复intvalue = 0的方法吗?或者我的for循环错误?或者在第二个循环中,我应该不将int作为list.length吗?
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;
if(list.length == 0)
return -1;
for(int i = last; i >= 0; i--){
if(list[i] == searchValue)
indexValue = i;
}
return indexValue;
}
}
我应该得到这个作为我的结果,但我不是,我一直得到ERROR在这一部分意外。谢谢。
--- Testing indexOf and lastIndexOf method ---
Getting indexOf of a null array
OK - indexOf threw exception for null array: BadArrayException: Array is null
Getting lastIndexOf of a null array
OK - lastIndexOf threw exception for null array: BadArrayException: Array is null
Getting lastIndexOf(5) of: []
OK - expected lastIndexOf to return -1 and got: -1
Getting indexOf(5) of: [5,10,5,15,5]
OK - expected indexOf to return 0 and got: 0
Getting indexOf(0) of: [5,10,5,15,5]
OK - expected indexOf to return -1 and got: -1
Getting indexOf(15) of: [5,10,5,15,5]
OK - expected indexOf to return 3 and got: 3
而这就是我所得到的 ---测试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 :(得分:1)
让我们从indexOf
开始。
当您找到要搜索的号码时,将索引存储在变量中,然后在完成后返回变量。让我们看看[5,10,5,15,5]
测试中发生了什么:
list[0] == 5
。是的,所以indexValue = 0
。理想情况下,此时我们应该返回0
。但事实并非如此:
list[1] == 5
。这是假的,所以什么都不做。list[2] == 5
。是的,所以indexValue = 2
。list[3] == 5
。这是假的,所以什么都不做。list[4] == 5
。是的,所以indexValue = 4
。4
。不应该是0
。事实证明,indexOf
的工作方式与lastIndexOf
一样。而不是返回上次找到值的索引,而是在找到值后立即返回索引。
lastIndexOf
有同样的问题,但它还有另一个问题,就是初始化last
的方法。我们假设我们有一个1元素数组,如下所示:
[1]
此数组的最后一个索引是0
,但您使用last
初始化list.length
,1
,而不是0
。你必须减去1。
答案 1 :(得分:0)
问题在于您last
的初始化。
String
SAMPLE
。 "SAMPLE".toCharArray().length
的值为5,但在循环中,您希望从"SAMPLE".toCharArray()[4]
循环到"SAMPLE".toCharArray()[0]
即。将last
更改为"SAMPLE".toCharArray().length - 1