Alex Großmann
Erfahrenes Mitglied
Hallo Ihr lieben,
ich hab (mal wieder x_X) ein Problem, ich kann einen Algorithmus nicht "elegant" umsetzen, und wollte euch mal um hilfe bitten.
Ich habe ein zwei Dimensionales Array aus Booleans. Die 1. Dimension dient quasi als Indexer für einen Tag (also 0 = Montag, 6 = Sonntag). Die 2. Dimension besteht aus 1440Minuten, was genau 24Stunden ist.
Nun lese ich aus einer Datenbank Termine aus. Die Zeiten sind in Dezimal angegeben. Dabei lese ich immer eine Sart und eine Endzeit aus.
Mein Ziel ist es, die freien Zeiten vor dem 1. Termin, zwischen den Terminen und nach dem letzten Termin eines Tages die freie Zeiten zu berechnen...
Dazu wollte ich das Array auf false, für die Zeit in der ein Termin statt findet, setzen. Das klappt auch:
Hier mal ein Schnipsel nur mit einem Tag...
Angenommen in der Datenbank steht folgendes:
Dann sollten folgende freie Termine da sein:
Bisher wollte ich mit 2 for-schleifen über das Array gehen, ich glaube der Ansatz stimmt, aber die Ausgaben nicht...ich finde meinen Denkfehler nicht
Hier noch mein aktueller Algorithmus:
ich bin für jede Hilfe dankbar!
ich hab (mal wieder x_X) ein Problem, ich kann einen Algorithmus nicht "elegant" umsetzen, und wollte euch mal um hilfe bitten.
Ich habe ein zwei Dimensionales Array aus Booleans. Die 1. Dimension dient quasi als Indexer für einen Tag (also 0 = Montag, 6 = Sonntag). Die 2. Dimension besteht aus 1440Minuten, was genau 24Stunden ist.
Nun lese ich aus einer Datenbank Termine aus. Die Zeiten sind in Dezimal angegeben. Dabei lese ich immer eine Sart und eine Endzeit aus.
Mein Ziel ist es, die freien Zeiten vor dem 1. Termin, zwischen den Terminen und nach dem letzten Termin eines Tages die freie Zeiten zu berechnen...
Dazu wollte ich das Array auf false, für die Zeit in der ein Termin statt findet, setzen. Das klappt auch:
Hier mal ein Schnipsel nur mit einem Tag...
Java:
while (erg3.next()) {
anfangszeit = erg3.getInt("anfangszeit");
laenge = erg3.getInt("laenge");
endzeit = erg3.getInt("endzeit");
wochentag = erg3.getString("wochentag");
System.out.println(anfangszeit + " - " + laenge + " - " + wochentag);
//Die Daten werden nun nach ihrem Tag sortiert in das Array geschrieben. Überall wo quasi ein Termin ist, wird ein false eingefügt!
if ("Montag".equals(erg3.getString("wochentag"))) {
for (int i = anfangszeit; i < endzeit; i++) {
freeTimes[0][i] = false;
}
} }
Angenommen in der Datenbank steht folgendes:
Wochentag | Termin von | Termin bis |
Montag | 100 | 300 |
Montag | 800 | 1000 |
Dann sollten folgende freie Termine da sein:
Wochentag | Frei von | Frei bis |
Montag | 0 | 300 |
Montag | 300 | 800 |
Montag | 1000 | 1440 |
Bisher wollte ich mit 2 for-schleifen über das Array gehen, ich glaube der Ansatz stimmt, aber die Ausgaben nicht...ich finde meinen Denkfehler nicht

Hier noch mein aktueller Algorithmus:
Java:
boolean erstesFrei = true, erstesBelegt = false;
int anfang = 0, ende = 0, l = 0;
for (int d = 0; d < 7; d++) {
for (int t = 0; t < 1440; t++) {
if (freeTimes[d][t] == true) { //Wenn kein Termin eingetragen ist - also frei ist
if (erstesFrei == true) { //erstes Frei merken
anfang = t;
erstesFrei = false;
}
ende++; //muss in jedem Fall hochgezählt werden
} else if (freeTimes[d][t] == false) { //geht rein wenn der 1. Termin (also dessen Anfang) gefunden wurde
if(erstesBelegt == true){
}
erstesFrei = true;
l = ende - anfang;
Statement st4 = cn.createStatement();
//Für jeden Loop einen Datenbank eintrag erstellen
st4.execute("INSERT INTO termin(anfangszeit, laenge, endzeit, wochentag) VALUES ('" + anfang + "','" + l + "','" + ende + "','" + return_Wochentag(d) + "');");
Statement st5 = cn.createStatement();
ResultSet erg4 = st5.executeQuery("SELECT * FROM termin ORDER BY IDTermin DESC LIMIT 1;");
st4.execute("INSERT INTO veranstaltungstermin(IDSaalFK, IDTerminFK, GGUIDFK) VALUES "
+ "('" + IDSaal + "',"
+ "'" + erg4.getString("IDTermin")
+ "','frei');");
}
}
anfang = 0;
}
ich bin für jede Hilfe dankbar!
Zuletzt bearbeitet: