Me pregunto cómo escribirías un método simple de java para encontrar el entero del armario a un valor dado en una lista de enteros ordenados.Encuentra el valor más cercano en una lista de ordererd
Aquí es mi primer intento:
public class Closest {
private static List<Integer> integers = new ArrayList<Integer>();
static {
for (int i = 0; i <= 10; i++) {
integers.add(Integer.valueOf(i * 10));
}
}
public static void main(String[] args) {
Integer closest = null;
Integer arg = Integer.valueOf(args[0]);
int index = Collections.binarySearch(
integers, arg);
if (index < 0) /*arg doesn't exist in integers*/ {
index = -index - 1;
if (index == integers.size()) {
closest = integers.get(index - 1);
} else if (index == 0) {
closest = integers.get(0);
} else {
int previousDate = integers.get(index - 1);
int nextDate = integers.get(index);
if (arg - previousDate < nextDate - arg) {
closest = previousDate;
} else {
closest = nextDate;
}
}
} else /*arg exists in integers*/ {
closest = integers.get(index);
}
System.out.println("The closest Integer to " + arg + " in " + integers
+ " is " + closest);
}
}
¿Qué opinas acerca de esta solución? Estoy seguro de que hay una manera más clara de hacer este trabajo ...
Tal vez tal método existe en alguna parte de las bibliotecas de Java y lo perdí ??
Manu
Creo que este código es elegante, pero no es tan rápido como el código original, ya que hay que crear una nueva lista para cada llamada de método. – Galghamon
fijo gracias :-) – dfa
Una gran ventaja de este algoritmo es que no requiere 'List 'para ordenar (como debería ser si se usa' Collections.binarySearch (..) '). –