Abend,
Ich habe das Problem, dass ich ein Menü erstellen soll und dies mehrmals aufrufen soll. Der Nutze soll es selbst beenden können. Das Menü soll Vehikel anlegen, ausgeben und entfernen können. Die Vehikel sind Unterklassen Auto und Traktor. Sobald ich ein Vehikel anlege öffnet sich das Menü zweimal hintereinander. Der Code ist etwas viel. Die Java-Doc Kommentare bitte ignorieren.
Ich habe das Problem, dass ich ein Menü erstellen soll und dies mehrmals aufrufen soll. Der Nutze soll es selbst beenden können. Das Menü soll Vehikel anlegen, ausgeben und entfernen können. Die Vehikel sind Unterklassen Auto und Traktor. Sobald ich ein Vehikel anlege öffnet sich das Menü zweimal hintereinander. Der Code ist etwas viel. Die Java-Doc Kommentare bitte ignorieren.
Java:
import java.util.Scanner;
import containers.*;
import mobil.*;
public class Main {
/**
* Main Klasse ruft die Methoden auf. Laufendes Menue.
* @param args
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList vehikel = new ArrayList();
menue(vehikel, scanner);
}
/**
* Methode ruft alle Untermethodem auf. Welche das Menü bilden
* @param list
* @param scanner
*/
public static void menue(ArrayList list, Scanner scanner) {
boolean schleife = true;
do {
System.out.println("Wilkommen im Menü");
System.out.println("<N> um ein neues Vehikel anlegen");
System.out.println("<L> um ein Vehikel zu löschen");
System.out.println("<Z> um alle Vehikel anzuzeigen");
System.out.println("<E> um das Programm zu beenden");
String auswahl = scanner.nextLine();
if (auswahl.equals("N")) {
list.add(autoAnlegen(scanner));
}
if (auswahl.equals("L")) {
vehikelEnt(list, scanner);
}
if (auswahl.equals("Z")) {
vehikelAus(list);
}
if (auswahl.equals("E")) {
System.out.println("Ihr Programm wurde beendet");
schleife = false;
}
} while (schleife);
}
/**
* Methode überprüft die Zahl
* @param scanner
* @return
* @throws IllegalArgumentException
*/
public static int posZahl(Scanner scanner)
throws IllegalArgumentException {
int posZ = scanner.nextInt();
if (posZ <= 0) {
System.err.println("Ihre Eingabe war nicht positiv");
throw new IllegalArgumentException();
}
return posZ;
}
public static Vehikel autoAnlegen(Scanner scanner) {
System.out.println("Was möchten Sie für ein Vehikel anlegen.");
System.out.println("Vehikel: Auto Traktor");
Vehikel vehikel = null;
do {
String artVehikel = scanner.nextLine();
if (artVehikel.equals("Auto")) {
String k = null;
do {
try {
k = kennzeichen(scanner);
} catch (IllegalArgumentException e) {
}
} while(k == null);
System.out.println("Bitte geben Sie die Ps ein");
int z = 0;
do {
try {
z = posZahl(scanner);
} catch (IllegalArgumentException e) {
}
} while(z == 0);
vehikel = erzeugeAuto(k, z);
System.out.println("Ihr Vehikel wurde erfolgreich angelegt");
} else if (artVehikel.equals("Traktor")) {
String k = null;
do {
try {
k = kennzeichen(scanner);
} catch (IllegalArgumentException e) {
}
} while(k == null);
System.out.println("Bitte geben Sie die Ps ein");
int z = posZahl(scanner);
vehikel = erzeugeTraktor(k, z);
System.out.println("Ihr Vehikel wurde erfolgreich angelegt");
} else {
System.out.println("Etwas ist schiefgelaufen."
+ "Versuchen Sie es erneut");
}
} while(vehikel == null);
return vehikel;
}
private static Auto erzeugeAuto(String kennzeichen, int ps) {
Auto auto = new Auto(kennzeichen, ps);
return auto;
}
private static Traktor erzeugeTraktor(String kennzeichen, int ps) {
Traktor traktor = new Traktor(kennzeichen, ps);
return traktor;
}
private static String kennzeichen(Scanner scanner)
throws IllegalArgumentException {
String error = "Ihre Eingabe war zu groß, oder Sie haben keine "
+ "Großbuchstaben verwendet. Keine leeren Eingaben."
+ "\nVersuchen Sie es erneut. \n";
String bezirk = null;
System.out.println("Bitte geben Sie ihren Bezirk an."
+ "Höchstens drei Buchstaben");
bezirk = scanner.nextLine();
if (bezirk.length() > 3 || !bezirk.matches("[A-Z]+")
|| bezirk.length() == 0) {
System.err.println(error);
throw new IllegalArgumentException();
}
System.out.println("Erkennungsnummer");
System.out.println("Setzt sich zusammen aus 1 bis 2 Buchstaben"
+ " und bis zu 4 Ziffern");
System.out.println("Ihre Erkennungsnummer mindestens 2 Zeichen be"
+ "sitzen und nichtmehr als 6.");
System.out.println("Bitte geben Sie ihre (Groß)Buchstaben an");
String erkennungB = scanner.nextLine();
if (erkennungB.length() > 2 || erkennungB.length() == 0
|| !erkennungB.matches("[A-Z]+")) {
System.err.println(error);
throw new IllegalArgumentException();
}
System.out.println("Nun bitte die Ziffern");
String erkennungZ = scanner.nextLine();
if (erkennungZ.length() <= 0 || erkennungZ.length() > 4
|| !erkennungZ.matches("[0-9]+")) {
System.err.println("Ihre Eingabe war zu groß, oder zu klein. "
+ "Es sind nur Ziffern erlaubt. Keine leeren Eingaben. \n"
+ "Versuchen Sie es erneut. \n");
throw new IllegalArgumentException();
}
String erkennungsN = erkennungB + erkennungZ;
if (erkennungsN.length() < 2 ) {
System.err.println("Ihre Eingabe war zu klein \n");
throw new IllegalArgumentException();
}
return bezirk + "-" + erkennungB + " " + erkennungZ;
}
private static void vehikelEnt(ArrayList list, Scanner scanner) {
String kennzeichen = scanner.nextLine();
int counter = 0;
for (int i = 0; i < list.size(); i++) {
if (((Vehikel) list.get(i)).getKennzeichen().equals(kennzeichen)) {
System.out.println(list.get(i));
System.out.println("Möchten Sie das Vehikel wirklich"
+ "entfernen ?");
System.out.println("<J> falls Ja");
System.out.println("<N> falls Nein");
String entfernen = scanner.nextLine();
if (entfernen.equals("j") || entfernen.equals("J")) {
list.remove(i);
System.out.println("Ihr Vehikel wurde geloescht");
counter++;
}
if (entfernen.equals("n") || entfernen.equals("N")) {
System.out.println("Ihr Vehikel wurde nicht geloescht");
}
break;
}
}
if (counter == 0) {
System.out.println("Dieses Kennzeichen existiert nicht");
}
}
private static void vehikelAus(ArrayList list) {
if (list.size() == 0) {
System.out.println("Momentan existieren keine Vehikel");
} else {
for (int i = 0; i < list.size(); i++) {
System.out.println("Vehikel " + (i + 1) + ": " + list.get(i));
}
}
}
}