Округление целого числа до определенных целых чисел в Java - PullRequest
1 голос
/ 26 февраля 2012

У меня небольшая проблема, но я надеюсь, что кто-нибудь может помочь.Допустим, у меня есть массив целых чисел, что-то вроде этого:

int[] = {65, 75, 85}

И программа принимает целочисленный ввод от пользователя, и вывод будет ближайшим числом из массива.

Например: если пользователь вводит 68, вывод будет 65, так как 65 является ближайшим числом.Или, если пользователь вводит 100, выходной результат будет 85, так как 85 является ближайшим.

РЕДАКТИРОВАТЬ: Это НЕ домашняя работа.Я программирую для себя, а не для кого-то еще: P

Заранее спасибо, Мартин

Ответы [ 3 ]

3 голосов
/ 26 февраля 2012

Если массив отсортирован, более эффективным подходом является использование двоичного поиска.Это занимает O (log n) времени вместо O (n) элементов, так как не нужно проверять каждое значение.

2 голосов
/ 26 февраля 2012

Важно сравнить абсолютные различия.

Попробуйте:

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, если массив пуст.

Примечание. Возможно, что элемент input и array на больше , чем Integer.MAX_VALUE друг от друга.Вы можете написать для этого код.

0 голосов
/ 26 февраля 2012
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
}
...