簡體   English   中英

是for循環導致此代碼錯誤的原因?

[英]Is the for loop what is causing the error in this code?

因此對於代碼的這一部分,我想知道為什么我的測試類無法正常工作。 我完全按照說明進行操作,但不確定為什么我會出錯。 基本上,對於這兩個部分,如果array參數為null,則必須拋出BadArrayException並顯示消息“ Array is null”。 如果數組參數的長度為0,則必須返回-1。 它不得更改數組參數的內容,也不得將整個數組參數的內容復制到另一個數組。 要找到第一個匹配項,它必須搜索一次array參數。 它不會讀取或打印任何內容。

那么我應該先修復intvalue = 0的方式嗎? 還是我的for循環有問題? 還是在第二個循環中,我是否應該只將int last作為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方法-

獲取空數組的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鍵結束程序

讓我們從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 ,但您要使用list.length初始化last ,即1 ,而不是0 您必須減去1。

問題是您初始化了last

以一個StringSAMPLE "SAMPLE".toCharArray().length將為5,但是在循環中,您希望從"SAMPLE".toCharArray()[4]循環到"SAMPLE".toCharArray()[0]

last更改為"SAMPLE".toCharArray().length - 1

暫無
暫無

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

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