問題:在這個問題中,你必須實作 int findMinimum(int[] arr) 方法,它會遍歷整個陣列并找到陣列中的最小數。
方法:int findMinimum(int[] arr)
輸入:arr = {9, 2, 3, 6} 輸出:2
class CheckMinimum
{
public static int findMinimum(int[] arr) {
int temp= arr[0];
for(int i=0; i<arr.length; i ){
if(temp< arr[i 1])
return temp;
else
temp= arr[i 1];
}
return temp;
}
public static void main(String args[]) {
int[] arr = {4,5,0,3,6};
System.out.print("Array : ");
for(int i = 0; i < arr.length; i )
System.out.print(arr[i] " ");
System.out.println();
int min = findMinimum(arr);
System.out.println("Minimum in the Array: " min);
}
}
我的代碼在大多數情況下都是成功的,但我不知道為什么這個失敗了。誰能解釋一下為什么?
案例:findMinimum([4,5,0,3,6])
預期輸出 0 我的代碼輸出:4
如果我更改 0 的位置,我的代碼仍然可以正常作業。謝謝!
uj5u.com熱心網友回復:
這是有問題的部分:
if (temp< arr[i 1])
return temp;
else
temp= arr[i 1];
對于您的陣列 4,5,0,3,6 它甚至永遠不會達到 0,因為 (temp) 4 < 5 (arr[i 1]) 并且您的函式回傳 4 并停止。您的函式回傳得太早。
正確的是:
if (temp > arr[i 1]) temp = arr[i 1]
把這個而不是你的整個 if...else 塊。
uj5u.com熱心網友回復:
對于使用 Java8 流的解決方案,您可以嘗試:
Arrays.stream(arr).min();
uj5u.com熱心網友回復:
if 條件中的 return 陳述句打破回圈并給出結果。由于第一個元素 4 小于下一個元素(即 5),因此它回傳 4。洗掉 if 中的 return 陳述句,它將起作用。
也可以使用內置函式來完成,如 python -min(sorted(arr))
uj5u.com熱心網友回復:
@milan 的答案可以解決這個問題。請注意,您for的findMinimum方法也會中斷。
如果您for(int i=0; i<arr.length; i ){在迭代最后一個元素時保留代碼將嘗試與位置 5 進行比較,但最大索引為 4 (0..4)
并將回傳系結例外的索引
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at CheckMinimum.findMinimum(CheckMinimum.java:7)
at CheckMinimum.main(CheckMinimum.java:23)
請減1
public static int findMinimum(int[] arr) {
int temp = arr[0];
for(int i=0; i < (arr.length - 1); i ){
int current = arr[i 1];
if(temp > current)
temp = current;
}
return temp;
}
您可以改進更改forinmain方法的代碼
for (int j : arr) System.out.print(j " ");
public static void main(String args[]) {
int[] arr = {4,5,0,3,6};
System.out.print("Array : ");
for (int j : arr) System.out.print(j " ");
System.out.println();
int min = findMinimum(arr);
System.out.println("Minimum in the Array: " min);
}
當您不處理 for 中的索引時,您可以使用該foreach方法。
所以.. 你也可以改變findMinimun方法Arrays.stream(arr).min();
但是要注意,因為這個回傳是一個 OptionalInt。
OptionalInt min = Arrays.stream(arr).min();
System.out.println("\nMinimum in the Array: " min);
最后,當你宣告一個陣列時,最好使用帶有型別的 []。
考慮String[] args代替String args[]
所以......最終的代碼可能是這樣的
import java.util.Arrays;
import java.util.OptionalInt;
class CheckMinimum {
public static void main(String args[]) {
int[] arr = {4,5,0,3,6};
System.out.print("Array : ");
for (int j : arr) System.out.print(j " ");
OptionalInt min = Arrays.stream(arr).min();
System.out.println("\nMinimum in the Array: " min);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/478938.html
