簡體   English   中英

為什么我的if語句未返回正確的結果?

[英]Why is my if statement not returning the correct result?

我的代碼結構方面有什么問題導致我得到錯誤嗎? 我想我已經修復了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類異常處理-2/07/2014

-測試minValue方法-

獲取null數組的minVal正常-minValue拋出null數組異常:BadArrayException

獲取空數組的minVal確定-空數組的minValue引發異常:BadArrayException

得到的minVal()為:[10]確定-預期的minValue返回10並得到:10

將minVal()設為:[20,30] OK-預期minValue返回20並得到:20

將minVal()設為:[40,30] OK-預期minValue返回30並得到:30

將minVal()設為:[10,10] OK-預期minValue返回10並得到:10

得到的minVal()為:[15,25,35] OK-預期的minValue返回15並得到:15

將minVal()設為:[25,20,30] OK-預期minValue返回20並得到:20

將minVal()的值設置為:[50,40,30] OK-預期的minValue返回30並得到:30

得到的minVal()為:[50,-10,40,-25,50,40,30] OK-預期的minValue返回-25並得到:-25

得到的minVal()為:[200,50,-40,60,-15,30,75] OK-預期的minValue返回-40並得到:-40

-測試copyRange方法-

獲取null數組的copyRange OK-copyRange引發了null數組的異常:BadArrayException

獲取以下項的copyRange(list,-1):[]好-copyRange引發異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:-1

獲得以下項的copyRange(list,0):[]確定-copyRange將數組正確復制為[]

獲取以下項的copyRange(list,1):[]好-copyRange引發異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:1

獲取以下內容的copyRange(list,-1):[20]正常-copyRange引發異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:-1

獲取以下內容的copyRange(list,0):[20]確定-copyRange將數組正確復制為[20]

獲取以下內容的copyRange(list,1):[20]確定-copyRange將數組正確復制為[]

獲取以下內容的copyRange(list,2):[20]正常-copyRange引發異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:2

獲取以下項的copyRange(list,-1):[10,15] OK-copyRange引發異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:-1

獲取以下項的copyRange(list,0):[10,15] OK-copyRange將數組正確復制為[10,15]

獲取以下項的copyRange(list,1):[10,15] OK-copyRange將數組正確復制為[15]

獲取以下項的copyRange(list,2):[10,15] OK-copyRange將數組正確復制為[]

獲得以下內容的copyRange(list,3):[10,15] OK-copyRange引發異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:3

獲得copyRange(list,-1)的值:[30,35,40,45,50] OK-copyRange拋出異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:-1

獲取以下內容的copyRange(list,0):[30,35,40,45,50] OK-copyRange將數組正確復制為[30,35,40,45,50]

獲取以下內容的copyRange(list,1):[30,35,40,45,50] OK-copyRange將數組正確復制為[35,40,45,50]

獲取以下內容的copyRange(list,2):[30,35,40,45,50] OK-copyRange將數組正確復制為[40,45,50]

獲取以下內容的copyRange(list,3):[30,35,40,45,50] OK-copyRange將數組正確復制為[45,50]

獲取以下內容的copyRange(list,4):[30,35,40,45,50] OK-copyRange將數組正確復制為[50]

獲取以下內容的copyRange(list,5):[30,35,40,45,50] OK-copyRange將數組正確復制為[]

獲取copyRange(list,6)的值:[30,35,40,45,50] OK-copyRange拋出異常java.lang.ArrayIndexOutOfBoundsException:數組索引超出范圍:6

-測試indexOf和lastIndexOf方法-

獲取空數組的indexOf確定-indexOf引發了空數組的異常:BadArrayException

獲取null數組的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] OK-預期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]錯誤-預期indexOf返回1但得到:7

正在獲取indexOf(15)為:[5,10,15,20,10,15,5,10,15,20]錯誤-預期indexOf返回2,但得到:8

正在獲取indexOf(20)為:[5,10,15,20,10,15,5,10,15,20]錯誤-預期indexOf返回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

完成-按Enter鍵結束程序

這些應該都可以,不會出現錯誤我是否在錯誤地處理此代碼? 抱歉,我之前曾問過這個問題,但方法不正確

您缺少的一件事是對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;        
    }
}

該代碼有三個問題,

  • 缺少對lastIndexOf函數中名為list的參數的NULL驗證。 如果匯總該驗證,則可以避免該錯誤:

錯誤-lastIndexOf引發了意外的異常:java.lang.NullPointerException

  • 對於這兩個函數,必須使用-1而不是0初始化var indexValue ,以避免:

錯誤-預期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則不再需要在代碼中進行的某些驗證。

最后,我建議您使用一些調試工具或用紙筆運行代碼,以發現錯誤的原因。

希望對您有所幫助。 問候!

當找到值時,應該中斷循環:

    for(int i = 0; i < (list.length); i++){
        if(list[i] == searchValue) {
            indexValue = i;
            **break;**
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM