2017-10-04 35 views
1

在學校,我們被要求創建一個函數,該函數可以在浮點數組中找到最低值。在前兩個數組中它起作用。但是因爲第三個數組只包含負值,它們都低於初始化給定的值。所以它仍然是0.0。查找浮點數組中的最低值

任何人都可以幫忙嗎?

float[] numbers = {3.3, 4.5, 7.2, 5.3, 9.0, 2.3}; // min 2.3, max 9.0 
float[] numbers2 = {-8.0, 4.5, 1.2, -5.6, -9.1, 4}; // min -9.1, max 4.5 
float[] numbers3 = {-0.4, -0.7, -3.5, -1.9, -8.0}; // min -8.0, max -0.4 

void setup() { 
    float highest = returnHighest(numbers); 
    float highest2 = returnHighest(numbers2); 
    float highest3 = returnHighest(numbers3); 
    println("The highest grade is: " + highest); 
    println("The highest grade is: " + highest2); 
    println("The highest grade is: " + highest3); 
} 

float returnHighest(float[] numbers) { 
    float highest = 0; 

    for(int i = 0; i < numbers.length; i++) { 
    if(numbers[i] > highest) { 
     highest = numbers[i]; 
    } 
    } 

    return highest; 
} 
+5

將'float highest = 0;'替換爲'float highest = numbers [0];' –

回答

4

但由於第三陣列只包含負值他們都是比在初始化給定值。

答案是......有點......簡單。您可以使用數組(1)中的某個數字初始化變量lowest,也可以使用lowest possible float value(2)對其進行初始化。

(1)陣列中的一些初始化你的變量:

float highest = numbers[0]; 

有了這個解決方案,首先必須確保沒有一個空數組。否則,你會得到一個ArrayIndexOutOfBoundsException

(2)以最低的浮點值初始化您的變量:

float highest = Float.NEGATIVE_INFINITY; 

每一個浮動值大於Float.NEGATIVE_INFINITY(嗯......除了負無窮大值本身)。循環後,您可以檢查highest是否仍等於Float.NEGATIVE_INFINITY。在這種情況下,陣列是空的或只包含負面的無限。

我會推薦方法(2)。這是查找集合/數組的最低/最高值的常用模式,並且也很好地處理空集合/數組。

1

問題是你在循環之前將最高位設置爲0。那麼你的if語句永遠不會計算爲真,因爲陣列中的所有值都小於0.加一個布爾值這樣的:

float returnHighest(float[] numbers) { 
    boolean firstTime = true; 
    float highest = 0; 

    for(int i = 0; i < numbers.length; i++) { 
    if(firstTime || numbers[i] > highest) { 
     highest = numbers[i]; 
     firstTime = false; 
    } 
    } 
    return highest; 
} 
0

我建議初始化 所以你的功能變得時設置的第一個元素爲最高值。

float returnHighest(float[] numbers) { 
    float highest = numbers[0]; 

    for(int i = 0; i < numbers.length; i++) { 
    if(numbers[i] > highest) { 
     highest = numbers[i]; 
    } 
    } 

    return highest; 
} 

而且我假設你做在標題錯誤,並希望找到的最高值

0

你試過只在陣列內比較數字?嘗試將初始值highest設置爲數組的初始值,而不是0

0

可以的highest初始值設定爲數組的第一個元素,而不是0

highest = numbers[0]; 

,但這種方式的問題是,當你有空數組將無法正常工作。在Java中

highest = -Float.MAX_VALUE; 

這樣

設置的highest初始值的浮點數的最低值,它會正常工作:

您也可以以更有效的方式解決這個問題與負浮點數的任何子集。

相關問題