2012-02-25 5 views
1

작은 문제가 있지만 누군가 도와 줄 수 있기를 바랍니다.Java에서 특정 정수에 정수를 반올림하십시오.

int[] = {65, 75, 85} 

그리고 프로그램이 사용자로부터 정수 입력을 받아, 출력은 배열에서 가장 가까운 수있을 것입니다 : 이제 나는이 같은 정수의 배열, 뭔가를한다고 가정 해 봅시다 .

예 : 사용자가 68을 입력하면 65가 가장 가까운 숫자이기 때문에 출력이 65가됩니다. 또는 사용자가 100을 입력하면 85가 가장 근접하기 때문에 출력은 85가됩니다.

편집 : 이것은 숙제가 아닙니다. P 미리

감사합니다, 마틴

+2

타겟 정수 X 인 경우, 단지 어레이의 Y 예컨대 ABS (X-Y)가 최소가되도록를 선택. –

답변

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

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 유형의 매개 변수를 정의하지만 정의하지 않은 array 유형의 매개 변수를 사용하십시오. –

+0

배열은 위에서 설명한 해당 int [] 배열이지만 이름은 없습니다. 입력을 위해 사용되지 않습니다 (약간 피곤합니다, 죄송합니다) –

3

배열을 정렬하는 경우보다 효율적인 방법은 이진 검색을 사용하는 것입니다. 이것은 모든 값을 검사 할 필요가 없으므로 O (n) 요소 대신 O (log 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 
관련 문제