我有一個小問題,但我希望有人可以提供幫助。 比方說,我有一個整數數組,像這樣:四捨五入到整數特定的整數的Java
int[] = {65, 75, 85}
而且該方案需要來自用戶的整數輸入,輸出將從陣列最接近的數字。
例如:如果用戶輸入68,輸出將是65,因爲65是最接近數。或者如果用戶輸入100,輸出將是85,因爲85是最接近的。
編輯:這不是功課。我編程,爲自己而不是爲別人:P提前
感謝, 馬丁
我有一個小問題,但我希望有人可以提供幫助。 比方說,我有一個整數數組,像這樣:四捨五入到整數特定的整數的Java
int[] = {65, 75, 85}
而且該方案需要來自用戶的整數輸入,輸出將從陣列最接近的數字。
例如:如果用戶輸入68,輸出將是65,因爲65是最接近數。或者如果用戶輸入100,輸出將是85,因爲85是最接近的。
編輯:這不是功課。我編程,爲自己而不是爲別人:P提前
感謝, 馬丁
最重要的事情是比較絕對差異。
試試這個:
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
分開。你可能想要爲此編碼。
這看起來不錯!謝謝,它的作品。 :) – Manaba 2012-02-25 22:06:12
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
}
您定義了一個您不使用的int類型的參數,但是使用了您未定義的類型數組的參數。 – 2012-02-25 21:19:20
該數組是上述相應的int []數組,但沒有名稱。對於輸入它不使用(有點累,對不起) – 2012-02-25 21:21:59
如果數組進行排序,更有效的方法是使用二進制搜索。這需要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
如果目標整數爲x,只挑選陣列在y使得ABS(X-Y)被最小化。 – 2012-02-25 21:11:08