为什么我的if语句没有返回正确的结果?

时间:2014-07-18 01:37:56

标签: java arrays debugging

我的代码结构是否有任何问题导致我出错? 我想我修复了我的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

完成 - 按回车键结束程序

这些都应该没有错误 我是否错误地接近此代码? 对不起,我之前询问过这个问题,但没有以正确的方式提出

3 个答案:

答案 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;**
        }
    }