TravelBuddyApp/TravelBuddyApp/src/main/java/domain/KurztripEmpfehlung.java

145 lines
4.3 KiB
Java

package domain;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class KurztripEmpfehlung {
User user;
private List<Ort> alleOrte;
private Ort heimatort;
public KurztripEmpfehlung(User user) {
// this.alleOrte = ladeAlleOrte();
this.heimatort = null;
}
public void setHeimatort(Ort heimatort) {
this.heimatort = heimatort;
}
public List<Ort> zufallsorteFahrrad(int maxEntfernung) {
List<Ort> gefilterteOrte = new ArrayList<>();
if (heimatort == null) {
System.out.println("Heimatort ist nicht gesetzt.");
return gefilterteOrte;
}
for (Ort ort : alleOrte) {
Reiseplanung reise = new Reiseplanung(user, ort);
double entfernung = reise.berechneEntfernung(heimatort, ort);
if (entfernung <= maxEntfernung) {
gefilterteOrte.add(ort);
}
}
if (gefilterteOrte.isEmpty()) {
System.out.println("Keine Orte innerhalb der Entfernung von " + maxEntfernung + " km gefunden.");
return gefilterteOrte;
}
return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size()));
}
public List<Ort> zufallsortePKW(int minEntfernung) {
List<Ort> gefilterteOrte = new ArrayList<>();
if (heimatort == null) {
System.out.println("Heimatort ist nicht gesetzt.");
return gefilterteOrte;
}
for (Ort ort : alleOrte) {
Reiseplanung reise = new Reiseplanung(user, ort);
double entfernung = reise.berechneEntfernung(heimatort, ort);
if (entfernung >= minEntfernung) {
gefilterteOrte.add(ort);
}
}
if (gefilterteOrte.isEmpty()) {
System.out.println("Keine Orte mindestens " + minEntfernung + " km entfernt gefunden.");
return gefilterteOrte;
}
return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size()));
}
private List<Ort> zufallsorteAuswaehlen(List<Ort> orte, int anzahl) {
List<Ort> zufallsorte = new ArrayList<>();
Random random = new Random();
int size = orte.size();
if (size <= 0) {
throw new IllegalArgumentException("Die Liste der Orte ist leer oder hat eine ungültige Größe.");
}
for (int i = 0; i < anzahl; i++) {
int index = random.nextInt(size);
zufallsorte.add(orte.get(index));
orte.remove(index); // Sicherstellen, dass Orte nicht doppelt empfohlen werden
size--; // Reduzieren der Größe der Liste nach Entfernen eines Elements
}
return zufallsorte;
}
// public double berechneEntfernung(Ort standort, Ort zielort) {
// double b1 = Math.toRadians(standort.getBreitengrad());
// double b2 = Math.toRadians(zielort.getBreitengrad());
// double l1 = Math.toRadians(standort.getLängengrad());
// double l2 = Math.toRadians(zielort.getLängengrad());
//
// double deltaL = l2 - l1;
// double cosDeltaL = Math.cos(deltaL);
// double acosArgument = Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * cosDeltaL;
//
// acosArgument = Math.max(-1.0, Math.min(1.0, acosArgument));
//
// double entfernung = 6378.388 * Math.acos(acosArgument);
//
// return entfernung;
// }
// private List<Ort> ladeAlleOrte() {
// List<Ort> alleOrte = new ArrayList<>();
//
// String csvFile = "src/main/resources/PLZ.csv";
// String line;
// try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
// while ((line = br.readLine()) != null) {
// line = line.replaceAll("\\s+", "");
// String[] data = line.split(";");
// int plz = Integer.parseInt(data[0].replaceAll("\"", ""));
// String ortName = data[1].replaceAll("\"", "");
// double breitengrad = Double.parseDouble(data[2].replaceAll("\"", ""));
// double laengengrad = Double.parseDouble(data[3].replaceAll("\"", ""));
// Ort ort = new Ort(plz, ortName);
// ort.breitengrad = breitengrad;
// ort.längengrad = laengengrad;
// alleOrte.add(ort);
// }
// } catch (IOException e) {
// System.err.println("Fehler beim Lesen der Datei: " + e.getMessage());
// e.printStackTrace();
// } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
// System.err.println("Fehlerhaftes Datenformat in der CSV-Datei: " + e.getMessage());
// e.printStackTrace();
// }
//
// return alleOrte;
// }
public Ort getHeimatort() {
return heimatort;
}
}