2012-02-25 49 views
1

我有一個小問題,但我希望有人可以提供幫助。 比方說,我有一個整數數組,像這樣:四捨五入到整數特定的整數的Java

int[] = {65, 75, 85} 

而且該方案需要來自用戶的整數輸入,輸出將從陣列最接近的數字。

例如:如果用戶輸入68,輸出將是65,因爲65是最接近數。或者如果用戶輸入100,輸出將是85,因爲85是最接近的。

編輯:這不是功課。我編程,爲自己而不是爲別人:P提前

感謝, 馬丁

+2

如果目標整數爲x,只挑選陣列在y使得ABS(X-Y)被最小化。 – 2012-02-25 21:11:08

回答

2

最重要的事情是比較絕對差異。

試試這個:

public int getClosest(int[] array, int input) { 
    int lowestDiff = Integer.MAX_VALUE; 
    int result = 0; 
    for (int i : array) { 
     int diff = Math.abs(input - i); // use API to get absolute diff 
     if (diff < lowestDiff) { 
      lowestDiff = diff; 
      result = i; 
     } 
    } 
    return result; 
} 

此代碼將返回0如果數組是空的。

注:有可能輸入和數組元素是更多Integer.MAX_VALUE分開。你可能想要爲此編碼。

+0

這看起來不錯!謝謝,它的作品。 :) – Manaba 2012-02-25 22:06:12

0
public int getClosest(int input) { 
    int ret = -1; 
    for(int i=;i<array.length;i++) { 
     if (ret==-1 || Math.abs(array[i]-input)<Math.abs(array[ret]-input)) { 
      ret = i; 
     } 
    } 
    if (ret>-1) 
     return array[ret]; 
    else 
     // To do 
} 
+0

您定義了一個您不使用的int類型的參數,但是使用了您未定義的類型數組的參數。 – 2012-02-25 21:19:20

+0

該數組是上述相應的int []數組,但沒有名稱。對於輸入它不使用(有點累,對不起) – 2012-02-25 21:21:59

3

如果數組進行排序,更有效的方法是使用二進制搜索。這需要O(log n)時間而不是O(n)元素,因爲它不需要檢查每個值。

public static void main(String... args) { 
    int[] values = {65, 75, 85}; 
    for (int find : new int[]{60, 68, 74, 88}) { 
     int result = closest(find, values); 
     System.out.println(find + " => " + result); 
    } 
} 

private static int closest(int find, int... values) { 
    int index = Arrays.binarySearch(values, find); 
    if (index >= values[0]) 
     return index; 
    if (index == -1) 
     return values[0]; // closest 
    index = -index - 2; 
    if (index + 1 >= values.length) 
     return values[values.length - 1]; // closest 
    final int v0 = values[index]; 
    final int v1 = values[index + 1]; 
    return Math.abs(v0 - find) <= Math.abs(v1 - find) ? v0 : v1; 
} 

打印

60 => 65 
68 => 65 
74 => 75 
88 => 85