for循环导致此代码中的错误是什么?

时间:2014-07-17 23:49:12

标签: java arrays debugging for-loop

因此,对于我的代码的这部分,我想知道为什么我的测试类不起作用。我完全按照说明操作,但我不确定为什么我的错误。 基本上对于这两个部分, 如果数组参数为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

完成 - 按回车键结束程序

2 个答案:

答案 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.length1,而不是0。你必须减去1。

答案 1 :(得分:0)

问题在于您last的初始化。

String SAMPLE"SAMPLE".toCharArray().length的值为5,但在循环中,您希望从"SAMPLE".toCharArray()[4]循环到"SAMPLE".toCharArray()[0]

即。将last更改为"SAMPLE".toCharArray().length - 1