所以我正在嘗試撰寫一個函式來檢查陣列中是否存在重復項。一旦函式檢測到重復,我希望它退出回圈并回傳型別。但是,在我的情況下,它繼續回圈,就好像中斷不存在一樣。請有人為我解釋為什么會發生這種情況?
public static boolean singleNumber(int[] nums) {
boolean type = false;
for (int i = 0; i < nums.length - 1; i ) {
for (int j = i 1; j <= nums.length - 1; j ) {
if (nums[i] == nums[j]) {
type = true;
break;
}
}
}
return type;
}
uj5u.com熱心網友回復:
該break會只得到內部回圈,而不是兩個回圈的。一種選擇是回傳true而不是休息。并回傳false在方法結束時,如果沒有提前回傳。type在這種情況下不需要變數。
uj5u.com熱心網友回復:
即使找到重復值,您當前的邏輯也會繼續迭代所有元素。要更改它,您需要檢查外部 for 回圈中的型別值,如果為真,則可以中斷該回圈并回傳該值。
雖然您目前的邏輯將有助于識別重復值,但一旦找到該值,它將繼續迭代陣列,這將是一個開銷。
以下是適合您要求的解決方案:
public class Main {
public static void main(String[] args) {
System.out.println( singleNumber(new int[]{1,3,1}) );
}
public static boolean singleNumber(int[] nums) {
boolean type = false;
for (int i = 0; i < nums.length - 1; i ) {
for (int j = i 1; j <= nums.length - 1; j ) {
if (nums[i] == nums[j]) {
type = true;
break; // to break out of the inner for loop
}
}
if( type)
{
break; // to break out of the outer for loop
}
}
return type;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/391009.html
上一篇:二維陣列上的乘法表
