我有一個任務,它獲取一個 int 值“n”和一個 Int 陣列作為引數,并且應該回傳一個布林值。該方法應該確定給定陣列中有多少“n”。如果數字是偶數,則該方法應回傳 true,否則回傳 false。如果陣列的長度為 0,它也應該回傳“false”。
我設法做的是:
public static boolean evenNumberOf(int n,int[]arr) {
boolean result = false;
System.out.println("Starting count");
if (n < arr.length) {
if (arr[n] == n) {
result = true;
} else {
return evenNumberOf(n-1,arr);
}
}
return result;
我真的很困惑,老實說我不知道??該怎么做。我真的盡力了,但我在這項任務上作業的時間越長,我就越不明白。任何幫助表示贊賞,并提前感謝您!:)
uj5u.com熱心網友回復:
將其分為兩種方法:
- 您最初呼叫的方法
- 以及一個被遞回呼叫以計算
n陣列中s數量的方法:
boolean evenNumberOf(int n, int[] arr) {
int count = countNs(n, arr, 0);
// Logic to choose what to return based on count and/or length of arr.
}
int countNs(int n, int[] arr, int i) {
// Check if arr[i] is equal to n.
// Make a recursive call to countNs for i := i 1.
// Combine the check/recursive call result to return a value.
}
uj5u.com熱心網友回復:
嘗試
//arr should not be empty, index and count >= 0
public static boolean evenNumberOf(int value, int index,int[]arr, int count) {
if(index >= arr.length) return count%2 == 0;
if(arr[index] == value ) {
count ;
}
return evenNumberOf(value, index, arr, count);
}
用法示例:(System.out.println(evenNumberOf(2, 0, new int[]{2,0,3,7,6,11,1,2}, 0));
可以添加輔助方法evenNumberOf(int value,int[]arr))
uj5u.com熱心網友回復:
由于陣列中的遞回計數作為副本關閉,我將在這里回答:
讓我們分析一下你做了什么以及為什么它是錯的
public static int countN(int n,int [] arr,int i, int count) {
if (arr[i] == n) {
System.out.println("MATCH");
count ;
return count;
}
在這里,您已經在匹配時回傳計數。你不應該這樣做,因為如果第一個數字已經相同,它會回傳 1。你需要做的就是增加這里的計數
else {
System.out.println("Moving on");
i = i 1;
countN(n,arr,i, count);
}
在這里你進行遞回。這很好。但這也需要在你得到匹配的情況下完成。它需要回傳該值。但是,這也只需要在您還沒有到達陣列末尾時才需要完成
if (arr.length == i) {
evenNumberOf(n,arr);
}
這部分沒有意義,因為您使用與開始時完全相同的引數呼叫 evenNumberOf,因此它將導致無限回圈。你應該在這里回傳計數。還要記住,陣列的最后一個索引是長度 - 1
把這些放在一起,你可以:
public static int countN(int n,int [] arr,int i, int count) {
if (arr[i] == n) {
count ;
}
if (arr.length - 1 == i) {
return count;
}
return countN(n, arr, i 1, count);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/371660.html
