Mi chiedo come si scriverà un semplice metodo java per trovare l'intero intero di un determinato valore in un elenco intero ordinato.Trova il valore più vicino in un elenco ordererd
Ecco il mio primo tentativo:
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);
}
}
Cosa ne pensate di questa soluzione? Sono sicuro che c'è un modo più pulito per fare questo lavoro ...
Forse un tale metodo esiste da qualche parte nelle librerie Java e l'ho perso ??
Manu
Penso che questo codice è elegante, ma non abbastanza veloce come il codice originale, perché si deve creare un nuova lista per ogni chiamata di metodo. – Galghamon
riparato grazie :-) – dfa
Un importante vantaggio di questo algoritmo è che non richiede 'Elenco' da ordinare (come dovrebbe essere se si utilizza 'Collections.binarySearch (..)'). –