[英]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.