Moin, ich mal wieder ^^
Ich bin immernoch am Schreiben für ein Programm, welches n-stellige Nummern verwaltet (für Kunden reserviert, wieder freigibt, die Informationen ausspuckt usw.)
Ursprünglich habe ich das mit einem Array gemacht, die bei Programmstart erstmal mit 10^n (n = wieviele Stellen die Nummern haben sollen) Nummern nach dem Schema 0000-0001-0002 usw. befüllt wurde. Doch das gefiel dem Chef nicht so 100% und ich habe jetzt noch 2 Stunden Zeit, um das ein wenig besser zu machen. Ich wollte das jetzt mit ArrayLists machen, die während der Laufzeit beim Reservieren dynamisch befüllt werden, sodass man nicht pauschal schon so viel Speicher braucht, obwohl man ihn evtl garnicht nutzt.
Ich weiß nur blöderweise nicht, wie ich das machen soll, dass die ArrayLists dynamisch befüllt werden (ich habe nicht mal einen Ansatz...)
Mein Quelltext sieht so aus:
Vielen Dank im Vorraus schonmal
Greetings, Vi
Ich bin immernoch am Schreiben für ein Programm, welches n-stellige Nummern verwaltet (für Kunden reserviert, wieder freigibt, die Informationen ausspuckt usw.)
Ursprünglich habe ich das mit einem Array gemacht, die bei Programmstart erstmal mit 10^n (n = wieviele Stellen die Nummern haben sollen) Nummern nach dem Schema 0000-0001-0002 usw. befüllt wurde. Doch das gefiel dem Chef nicht so 100% und ich habe jetzt noch 2 Stunden Zeit, um das ein wenig besser zu machen. Ich wollte das jetzt mit ArrayLists machen, die während der Laufzeit beim Reservieren dynamisch befüllt werden, sodass man nicht pauschal schon so viel Speicher braucht, obwohl man ihn evtl garnicht nutzt.
Ich weiß nur blöderweise nicht, wie ich das machen soll, dass die ArrayLists dynamisch befüllt werden (ich habe nicht mal einen Ansatz...)
Mein Quelltext sieht so aus:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class ReservationSystem {
/**
* Legt fest, wieviele Stellen die Nummern haben sollen
*/
final int stellen = 4;
ArrayList<String> nummern;
ArrayList<Boolean> reserviert;
ArrayList<String> kunden;
BufferedReader buffy;
public ReservationSystem() {
buffy = new BufferedReader(new InputStreamReader(System.in));
}
/**
* Dump the information to the standard output stream.
*/
void dump() {
for (int i = 0; i < nummern.size(); i++)
if (reserviert.get(i) == true)
System.out.println(nummern.get(i) + " reserviert von "
+ kunden.get(i));
else
System.out.println(nummern.get(i) + " frei");
System.out.println("Dump wurde erfolgreich ausgeführt.");
}
void release(String kunde, String nummer) {
for (int i = 0; i < nummern.size(); i++) {
if (kunden.get(i).equals(kunde) || nummern.get(i).equals(nummer)) {
kunden.set(i, "");
reserviert.set(i, Boolean.FALSE);
}
}
System.out.println("Release wurde erfolgreich ausgeführt.");
}
void kundenDump() {
for (int i = 0; i < kunden.size(); i++)
if (kunden.get(i) != "")
System.out.println(kunden.get(i) + " " + nummern.get(i));
}
void reserve(String kunde, int anzahl) {
// Solange dieser Wert kleiner als anzahl ist, wird nicht
// reserviert (um sicherzustellen, dass genug
// zusammenhängende Nummern frei sind)
int frei = 0;
// Legt den Punkt fest, ab dem die Nummern reserviert werden
int start = 0;
int i = 0;
if (anzahl > (Integer.parseInt(nummern.get(i)) / 10)) // Prüft, ob die
// gewünschte
// Anzahl
// nicht zu groß ist
{
JOptionPane.showMessageDialog(null,
"So viele Nummern stehen nicht zur Verfügung.");
System.err.println("Reserve konnte nicht ausgeführt werden.");
} else {
try {
while (frei < anzahl) {
if (anzahl > 10) {
if (Integer.parseInt(nummern.get(i)) % 10 != 0) {
i++;
}
}
if (reserviert.get(i) == true) // Wenn die Nummer reserviert
// ist, muss von min. i+1
// angefangen werden
{
i++;
frei = 0;
start = i;
} else {
frei++;
i++;
}
}
for (i = start; i < (start + anzahl); i++) // S.o.
{
reserviert.set(i, Boolean.TRUE); // Nummer wird reserviert
kunden.set(i, kunde); // Dazugehöriger Kunde wird
// eingetragen
}
System.out.println("Reserve wurde erfolgreich ausgeführt.");
} catch (ArrayIndexOutOfBoundsException e) {
System.err
.println("Nicht mehr genug zusammenhängende Nummern verfügbar!");
System.err.println("Reserve konnte nicht durchgeführt werden.");
}
}
}
public void doReserve() {
System.out.print("Bitte Namen eingeben: ");
String kunde;
int anzahl;
try {
kunde = getNextLine();
} catch (IOException e) {
System.err
.println("Aufgrund eines Fehlers wird das Programm jetzt beendet.");
throw new RuntimeException(e);
}
System.out.print("Wieviele Nummern möchten Sie reservieren? ");
try {
anzahl = Integer.parseInt(getNextLine());
} catch (IOException e) {
System.err
.println("Aufgrund eines Fehlers wird das Programm jetzt beendet.");
throw new RuntimeException(e);
}
reserve(kunde, anzahl);
}
public void doRelease() {
System.out
.println("Bitte Kundennamen oder freizugebende Nummer eingeben.");
try {
String kunde = getNextLine();
String nummer = kunde;
release(kunde, nummer);
} catch (IOException e) {
System.err
.println("Aufgrund eines Fehlers wird das Programm jetzt beendet.");
throw new RuntimeException(e);
}
}
public void haupt() {
String cmd = null;
while (true) {
System.out.println("Bitte Befehl eingeben: ");
System.out
.println("1. reserve - für einen Kunden Nummern reservieren");
System.out
.println("2. release - einzelne Nummer oder alle Nummern eines Kunden wieder freigeben");
System.out
.println("3. dump - gibt alle Nummern und den Reservierungsstatus aus");
System.out
.println("4. client dump - gibt Kunden und ihre Nummern aus");
System.out.println("5. exit - beendet das Programm");
try {
cmd = getNextLine().trim().toLowerCase();
} catch (IOException e) {
// ignore
}
if ("dump".equals(cmd)) {
dump();
} else if ("client dump".equals(cmd)) {
kundenDump();
} else if ("reserve".equals(cmd)) {
doReserve();
} else if ("release".equals(cmd)) {
doRelease();
} else if ("exit".equals(cmd)) {
System.out
.println("Sind Sie sicher, dass sie das Programm beenden wollen?");
System.out.println("ja");
System.out.println("nein");
try {
cmd = getNextLine();
} catch (IOException e) {
System.err
.println("Aufgrund eines Fehlers wird das Programm jetzt beendet.");
break;
}
if ("ja".equals(cmd)) {
System.out.println("Das Programm wurde beendet.");
break;
}
} else {
System.out.println("Befehl ungültig!");
}
}
}
private String getNextLine() throws IOException {
try {
return buffy.readLine();
} catch (IOException e) {
System.err
.println("getNextLine(): Exception hit while reading next line from System.in");
e.printStackTrace();
throw e;
}
}
public static void main(String[] args) {
ReservationSystem r = new ReservationSystem();
r.haupt();
}
}
Vielen Dank im Vorraus schonmal
Greetings, Vi