Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Es kann z.B. 3 und 5 (also zwei Einträge in der Liste drin stehen)
list.add(3)
list.add(5)
Nun habe ich eine weitere Zahl als reinen int:
int myNumber = 4
Nun möchte ich die nächstgelegene Zahl aus der Liste bekommen.
Also in diesem Beispiel die 5 (aus list)
Habe ich nun aber als myNumber = 6 -> dann möchte ich die 3 aus der Liste.
Prinzipiell könntest du für jeden Wert in der Liste die absolute Differenz errechnen.
Die Zahl mit der geringsten Differenz ist dann deine Zahl, die am nächsten an der gesuchten Zahl dran liegt. Diese musst du dir während des "Vorgangs" merken und ggf. ersetzen, falls du eine Zahl gefunden hast, die eine kleinere Differenz hat.
Der Ansatz wird so für dein Vorhaben aber nicht funktionieren. (Zumindest auf den ersten Blick) Bei der Konstellation {3,5} und der Zahl 6 würde so immer die 5 als nähste Zahl raus kommen. Wenn ich dich richtig verstanden habe willst du aber die 3 bekommen.
Korrekt, ich möchte den nächste Wochentag von meinem "Template" haben.
Template:
list.add(1) -> also Dienstag
list.add(3) -> also Donnerstag
list.add(5) -> also Samstag
Der letzte erfolgreiche "Run" war am Dienstag (diese Info hole ich mir aus einer Tabelle)
-> also will ich ein neues Objekt für Donnerstag (nächster Wochentag in der Liste) erzeugen.
Beim Samstag soll es dann aber wieder zu list.add(1) -> also der Dienstag....
Also ich würde das einfach anders lösen, ein wenig objektorientierter
Java:
class WeekDaySet {
private NavigableSet<Integer> days;
public WeekDaySet() {
this.days = new TreeSet<>();
}
public void add(int weekDay) {
checkWeekDayRange(weekDay);
days.add(weekDay);
}
public int getNext(int weekDay) {
checkWeekDayRange(weekDay);
if (days.isEmpty()) {
throw new NoSuchElementException("No valid day set");
}
return Objects.requireNonNullElseGet(days.higher(weekDay), () -> days.ceiling(0));
}
private void checkWeekDayRange(int weekDay) {
if (weekDay < 0 || 6 < weekDay) {
throw new IllegalArgumentException("WeekDaySet can only be in range [0, 6]");
}
}
}
Dann mit sowas asführen:
Java:
WeekDaySet set = new WeekDaySet();
set.add(3);
set.add(5);
System.out.println(set.getNext(4));
System.out.println(set.getNext(6));