Skip to content

Commit 10ee926

Browse files
author
Florian Weiß
committed
wiederholung anfang von dienstag abend
1 parent 088a769 commit 10ee926

File tree

2 files changed

+60
-37
lines changed

2 files changed

+60
-37
lines changed

pt3/PT3/src/kalender/TerminMitWiederholungImpl.java

+58-35
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class TerminMitWiederholungImpl extends TerminImpl implements TerminMitWi
1919

2020
private Wiederholung wdh;
2121

22-
// TODO Konstruktorprobleme auflösen
22+
// Konstruktorprobleme auflösen
2323
public TerminMitWiederholungImpl(String beschreibung, Datum start, Dauer dauer, WiederholungType type, int anzahl,
2424
int zyklus) {
2525
super(beschreibung, start, dauer);
@@ -28,34 +28,32 @@ public TerminMitWiederholungImpl(String beschreibung, Datum start, Dauer dauer,
2828
public TerminMitWiederholungImpl(String beschreibung, Datum start, Dauer dauer, Wiederholung wdh) {
2929
super(beschreibung, start, dauer);
3030
}
31-
32-
31+
3332
public Wiederholung getWdh() {
3433
return new WiederholungImpl(wdh);
3534
}
3635

37-
3836
@Override
3937
public Map<Datum, Termin> termineIn(Monat monat) {
40-
// TODO auf termineFuer zurückführen
41-
return null;
38+
// auf termineFuer zurückführen
39+
return termineFuer(monat);
4240
}
4341

4442
@Override
4543
public Map<Datum, Termin> termineIn(Woche woche) {
46-
// TODO auf termineFuer zurückführen
47-
return null;
44+
// auf termineFuer zurückführen
45+
return termineFuer(woche);
4846
}
4947

5048
@Override
5149
public Map<Datum, Termin> termineAn(Tag tag) {
52-
// TODO auf termineFuer zurückführen
53-
return null;
50+
// auf termineFuer zurückführen
51+
return termineFuer(tag);
5452
}
5553

56-
5754
/**
58-
* Beispiel für den naiven Iterator, der alle Wiederholungen explizit aufzaehlt
55+
* Beispiel für den naiven Iterator, der alle Wiederholungen explizit
56+
* aufzaehlt
5957
*/
6058
@Override
6159
public Iterator<Termin> iterator() {
@@ -82,44 +80,59 @@ public Termin next() {
8280
};
8381
}
8482

85-
8683
@Override
8784
public IntervallIterator<Datum> intervallIterator(int von, int bis) {
8885
return new IntervallIterator<Datum>() {
89-
// TODO end Index als upper bound merken / cursor initialisieren
90-
86+
// end Index als upper bound merken / cursor initialisieren
87+
private TerminMitWiederholung current = null;
88+
private int howManySeen = von;
89+
9190
@Override
9291
public boolean hasNext() {
93-
// TODO in Abhängigkeit von cursor und upper bound (upper bound ist inkl.)
94-
return false;
92+
// in Abhängigkeit von cursor und upper bound (upper bound
93+
// ist inkl.)
94+
return howManySeen <= bis;
9595
}
9696

9797
@Override
9898
public Datum next() {
99-
// TODO nächstes Element mit geeigneter Methode von Wiederholung berechnen
100-
return null;
99+
// nächstes Element mit geeigneter Methode von
100+
// Wiederholung berechnen
101+
if (current == null) {
102+
current = TerminMitWiederholungImpl.this;
103+
} else {
104+
current = new TerminMitWiederholungImpl(getBeschreibung(), current.getWdh().naechstesDatum(),
105+
getDauer(), current.getWdh().sub(1));
106+
}
107+
howManySeen += 1;
108+
return current.getDatum();
101109
}
102110

103111
};
104112
}
105113

106-
107114
@Override
108115
public Map<Datum, Termin> termineFuer(DatumsGroesse groesse) {
109116
// TODO Indizes fuer Start und End Intervall berechnen
110-
111-
// TODO Indizes auf Gültigkeit prüfen
117+
int startIndex = 0;
118+
int endIndex;
119+
// TODO Indizes auf Gültigkeit prüfen
112120
// wenn endIndex > maxIntervallIndex dann setze endIndex auf
113121
// maxIntervallIndex
122+
if (endIndex > wdh.maxIntervallIndex()){
123+
endIndex = wdh.maxIntervallIndex();
124+
}
114125
//
115126
// wenn endIndex < startIndex || endIndex < 0 || startIndex < 0 ||
116127
// endIndex > maxIntervallIndex
117-
// gib null zurück
118-
119-
//
120-
// TODO hier den Intervalliterator nutzen
128+
// gib null zurück
129+
if(endIndex < startIndex || endIndex < 0 || startIndex < 0 || endIndex > wdh.maxIntervallIndex()){
130+
return null;
131+
}
132+
//
133+
// TODO hier den Intervalliterator nutzen
121134
// Map erzeugen und die Wiederholungen einsammeln
122-
135+
123136
return null;
124137
}
125138

@@ -138,33 +151,40 @@ public WiederholungImpl(WiederholungType wdhType, int anzahl, int cyclus) {
138151
public WiederholungImpl(Wiederholung wdh) {
139152
this(wdh.getType(), wdh.anzahl(), wdh.getZyklus());
140153
}
154+
141155
@Override
142156
public WiederholungType getType() {
143157
return wdhType;
144158
}
159+
145160
@Override
146161
public int getZyklus() {
147162
return cycle;
148163
}
164+
149165
@Override
150166
public int anzahl() {
151167
return anzahl;
152168
}
169+
153170
@Override
154171
public int maxIntervallIndex() {
155172
return anzahl;
156173
}
174+
157175
@Override
158176
public int intervallLaenge() {
159177
return cycle * wdhType.inTagen();
160178
}
179+
161180
/*
162-
* @see kalender.interfaces.Wiederholung#naechstesIntervall(kalender.interfaces.Datum)
181+
* @see kalender.interfaces.Wiederholung#naechstesIntervall(kalender.
182+
* interfaces.Datum)
163183
*
164184
* Methode liefert den Intervallindex für das einem Datum nachfolgendem
165185
* Intervall. Es werden auch Intervalle berechnet, die außerhalb des
166-
* gültigen Bereichs maxIntervallIndex liegen. Nutzer der Methode müssen
167-
* sicher stellen, dass die Gültigkeit des Index geprüft wird.
186+
* gültigen Bereichs maxIntervallIndex liegen. Nutzer der Methode
187+
* müssen sicher stellen, dass die Gültigkeit des Index geprüft wird.
168188
*/
169189
@Override
170190
public int naechstesIntervall(Datum dat) {
@@ -192,10 +212,11 @@ public int naechstesIntervall(Datum dat) {
192212
* @see kalender.interfaces.Wiederholung#vorherigesIntervall(kalender.
193213
* interfaces.Datum)
194214
*
195-
* Methode liefert den Intervallindex für das einem Datum vorausgehenden
196-
* Intervall. Es werden auch Intervalle berechnet, die außerhalb des
197-
* gültigen Bereichs maxIntervallIndex liegen. Nutzer der Methode müssen
198-
* sicher stellen, dass die Gültigkeit des Index geprüft wird.
215+
* Methode liefert den Intervallindex für das einem Datum
216+
* vorausgehenden Intervall. Es werden auch Intervalle berechnet, die
217+
* außerhalb des gültigen Bereichs maxIntervallIndex liegen. Nutzer
218+
* der Methode müssen sicher stellen, dass die Gültigkeit des Index
219+
* geprüft wird.
199220
*/
200221
@Override
201222
public int vorherigesIntervall(Datum dat) {
@@ -223,6 +244,7 @@ public int vorherigesIntervall(Datum dat) {
223244
public Datum naechstesDatum() {
224245
return naechstesDatum(1);
225246
}
247+
226248
/*
227249
* @see kalender.interfaces.Wiederholung#naechstesDatum(int)
228250
*/
@@ -231,13 +253,15 @@ public Datum naechstesDatum(int faktor) {
231253
int anzahlTage = faktor * intervallLaenge();
232254
return new DatumImpl(getDatum()).add(new DauerImpl(anzahlTage, 0, 0));
233255
}
256+
234257
/*
235258
* @see kalender.interfaces.Wiederholung#sub(int)
236259
*/
237260
@Override
238261
public Wiederholung sub(int wdhCount) {
239262
return new WiederholungImpl(wdhType, anzahl - wdhCount, cycle);
240263
}
264+
241265
/*
242266
* @see kalender.interfaces.Wiederholung#add(int)
243267
*/
@@ -246,7 +270,6 @@ public Wiederholung add(int wdhCount) {
246270
return new WiederholungImpl(wdhType, anzahl + wdhCount, cycle);
247271
}
248272

249-
250273
}
251274

252275
}

pt3/PT3/src/kalender/interfaces/TerminMitWiederholung.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ public interface TerminMitWiederholung extends Termin, Iterable<Termin> {
1212
public Wiederholung getWdh();
1313
/*
1414
* Ein Iterator, der in einem vorgebenen Intervall das Datum der
15-
* Wiederholungen des Termins, die in dem Intervall liegen, zurückliefert.
15+
* Wiederholungen des Termins, die in dem Intervall liegen, zurückliefert.
1616
*
1717
* von ist der erste Intervallindex (inkl.), bis letzte Intervallindex
1818
* (inkl.).
1919
*
20-
* Zu Details siehe Erläuterung zur Implementierung in der Klasse
20+
* Zu Details siehe Erläuterung zur Implementierung in der Klasse
2121
* TerminMitWiederholungImpl.
2222
*/
2323
public IntervallIterator<Datum> intervallIterator(int von, int bis);

0 commit comments

Comments
 (0)