diff --git a/Roboter/tpe/exceptions/roboter/Nexus6.java b/Roboter/tpe/exceptions/roboter/Nexus6.java index 73e3a5c..7069618 100644 --- a/Roboter/tpe/exceptions/roboter/Nexus6.java +++ b/Roboter/tpe/exceptions/roboter/Nexus6.java @@ -38,4 +38,9 @@ public class Nexus6 extends Robots { public RobotType getRobotType () { return this.robotType; } + + @Override + public void triggerPowerSwitch () { + powerSwitch = false; + } } diff --git a/Roboter/tpe/exceptions/roboter/Robots.java b/Roboter/tpe/exceptions/roboter/Robots.java index 6d93507..0299c34 100644 --- a/Roboter/tpe/exceptions/roboter/Robots.java +++ b/Roboter/tpe/exceptions/roboter/Robots.java @@ -7,81 +7,84 @@ import tpe.exceptions.RobotException; import tpe.exceptions.RobotIllegalStateException; import tpe.exceptions.RobotMagicValueException; - -public abstract class Robots implements Robot{ +public abstract class Robots implements Robot { protected String name; protected RobotException error; protected boolean powerStatus; + /** - * Legt fest das ein Roboter standardmäßig einen Namen hat und setzt den Power Knopf bei Erstellung auf aus + * Legt fest das ein Roboter standardmäßig einen Namen hat und setzt den Power + * Knopf bei Erstellung auf aus + * * @param name */ public Robots(String name) { this.name = name; this.powerStatus = false; } + @Override public abstract int getId(); + @Override public String getName() { return name; } + @Override public void triggerPowerSwitch() { - if(powerStatus==false) - powerStatus=true; + if (powerStatus == false) + powerStatus = true; else - powerStatus=false; - + powerStatus = false; + } + @Override public boolean isPowerOn() { - + return powerStatus; } + @Override public RobotException getLastException() { return error; } + public boolean checkRobotMagicValueException(int[] zahlen) { - boolean error=false; - for(int i = 0; i < zahlen.length; i++) { - if(zahlen[i]==42) { - error=true; + boolean error = false; + for (int i = 0; i < zahlen.length; i++) { + if (zahlen[i] == 42) { + error = true; } } return error; } + /** * Unterscheidung der Ausgabe durch die Art der Sortierung:
- * R2D2: sortiert aufsteigend Wert an der Stelle 0 des Arrays ist kleiner als an der letzten Stelle
- * C3PO: sortiert absteigend Wert an der Stelle 0 des Arrays ist größer als an der letzten Stelle + * R2D2: sortiert aufsteigend Wert an der Stelle 0 des Arrays ist kleiner als an + * der letzten Stelle
+ * C3PO: sortiert absteigend Wert an der Stelle 0 des Arrays ist größer als an + * der letzten Stelle */ public String speak(int[] zahlen) throws RobotException { - - if(powerStatus==false) - { - throw new RobotIllegalStateException("Der Roboter ist ausgeschaltet!", this.getName()); + + if (powerStatus == false) { + + error = new RobotIllegalStateException("Der Roboter ist ausgeschaltet!", this.getName()); + throw error; + } else if (checkRobotMagicValueException(zahlen) == true) { + error = new RobotMagicValueException("Zahl 42 kann nicht verarbeitet werden!", this.getName()); + throw error; + } else if (zahlen[0] < zahlen[zahlen.length - 1]) { + return Arrays.stream(zahlen).mapToObj(String::valueOf).collect(Collectors.joining(", ")); + } else { + return Arrays.stream(zahlen).mapToObj(String::valueOf).collect(Collectors.joining("; ")); } - else if(checkRobotMagicValueException(zahlen)==true) - { - throw new RobotMagicValueException("Zahl 42 kann nicht verarbeitet werden!",this.getName()); - }else - if(zahlen[0] fs.robotInstructions(testid,testZahlen2)); + assertEquals(thrownState.getMessage(),"Robotname-Testname: Der Roboter ist ausgeschaltet!"); + + fs.triggerPower(testid); + RobotMagicValueException thrownValue=Assertions.assertThrows(RobotMagicValueException.class,() -> fs.robotInstructions(testid,testZahlen1)); + assertEquals(thrownValue.getMessage(),"Robotname-Testname: Zahl 42 kann nicht verarbeitet werden!"); + + fs.triggerPower(testid2); + assertEquals(fs.robotInstructions(testid, testZahlen2), "78; 41; 20; 4; 3; 1"); + assertEquals(fs.robotInstructions(testid2, testZahlen2), "1, 3, 4, 20, 41, 78"); + } + + @Test + void robotBlackBox() { + fs.triggerPower(testid); + RobotMagicValueException thrownValue=Assertions.assertThrows(RobotMagicValueException.class,() -> fs.robotInstructions(testid,testZahlen1)); + assertEquals(thrownValue.getMessage(),fs.robotBlackbox(testid)); + +// RobotIllegalStateException thrownState = Assertions.assertThrows(RobotIllegalStateException.class,() -> fs.robotInstructions(testid,testZahlen2)); +// assertEquals(thrownState.getMessage(),fs.robotBlackbox(testid)); + } + + } diff --git a/Roboter/tpe/ui/UI.java b/Roboter/tpe/ui/UI.java index 1c0f936..092f0b7 100644 --- a/Roboter/tpe/ui/UI.java +++ b/Roboter/tpe/ui/UI.java @@ -8,23 +8,20 @@ import tpe.exceptions.roboter.RobotFactory; import tpe.facade.FactorySystem; public class UI { - + private FactorySystem fs; Scanner sc = new Scanner(System.in); -public UI (FactorySystem fs) { - this.fs = fs; - menu(); -} - + public UI(FactorySystem fs) { + this.fs = fs; + menu(); + } + private void menu() { -private void menu() { - - System.out.println("Willkommen bei der " + fs.getFName() + "!"); + System.out.println("Willkommen bei der " + fs.getFName() + "!"); - mainloop: - while (true) { + mainloop: while (true) { System.out.println(); System.out.println("--------"); System.out.println("Hauptmenü"); @@ -37,18 +34,23 @@ private void menu() { System.out.print("> "); int input = Integer.parseInt(sc.nextLine()); System.out.println(); - - switch(input) { + + switch (input) { // case 1: showRobots(); break; - case 2: buildRobot(); break; - case 3: choseRobot(); break; - case 4: break mainloop; + case 2: + buildRobot(); + break; + case 3: + choseRobot(); + break; + case 4: + break mainloop; } - + System.out.println(); - - } -} + + } + } // private void showRobots() { // @@ -56,143 +58,172 @@ private void menu() { // // // Seriennummer, Typ und Name aller Roboter soll aufgelistet werden // } - + private void buildRobot() { + String name = null; + System.out.println("Sie haben sich dazu entschieden einen Roboter zu bauen. " + "Wenn Sie einen Roboter vom Typ R2D2 bauen möchten, dann drücken Sie die (1). " - + "Wenn Sie einen Roboter vom TYp C3PO bauen möchten, dann drücken Sie die (2)."); - - + + "Wenn Sie einen Roboter vom Typ C3PO bauen möchten, dann drücken Sie die (2)."); + System.out.print("> "); - int robotType = Integer.parseInt(sc.nextLine()); //robotType als Variable für Typ - System.out.println(); - - //Namensgabe - System.out.println("Welchen Namen möchten Sie dem Roboter geben?"); - - System.out.print("> "); - String name = sc.nextLine(); //name als Variable für Name - System.out.println(); - - int serialnumber = fs.constructRobot( robotType, name); - - System.out.println("Sie haben einen Roboter vom Typ " + robotType + " mit dem Namen " + name + " mit der Seriennummer " + serialnumber + " erstellt."); + int robotType = Integer.parseInt(sc.nextLine()); + + if (robotType > 2 || robotType < 1) { + System.out.println( + "Es stehen nur (1) oder (2) bei der Auswahl des Robotertypen zur verfügung. Bitte erneut wählen."); + System.out.println(); + buildRobot(); + } else { + System.out.println(); + + // Namensgabe + + boolean realname = true; + + while (realname) { + System.out.println("Welchen Namen möchten Sie dem Roboter geben."); + + System.out.print("> "); + name = sc.nextLine(); + + if (name != "") + break; + + } + + System.out.println(); + + int serialnumber = fs.constructRobot(robotType, name); + + System.out.println("Sie haben einen Roboter vom Typ " + robotType + " mit dem Namen " + name + + " mit der Seriennummer " + serialnumber + " erstellt."); + + } + } - + private void choseRobot() { - + System.out.println("Geben Sie die Seriennummer des Roboters ein, mit dem Sie arbeiten möchten."); - + System.out.print("> "); - int id = Integer.parseInt(sc.nextLine()); + int id = Integer.parseInt(sc.nextLine()); System.out.println(); - + // if (id ist nicht vorhanden ) // System.out.println("Es exisitiert kein Roboter mit der Seriennummer " + id " ."); // else - - loop: - while (true) { - System.out.println("Was möchten Sie mit Ihrem Roboter tun?"); - System.out.println("1 -> Zustand des Roboters"); - System.out.println("2 -> AN oder Aus schalten"); - System.out.println("3 -> Roboter spricht"); - System.out.println("4 -> Letzte Fehlermeldung auslesen"); // Haben bzw. brauchen wir solch eine Funktion - System.out.println("5 -> Daten des Roboters abrufen"); - System.out.println("6 -> Zurück ins Hauptmenü"); - - System.out.print("> "); - int input = Integer.parseInt(sc.nextLine()); - switch (input) { - case 1: robotStatus(id); break; - case 2: onoffbutton(id); break; - case 3: robotSpeak(id); break; - case 4: lastError(id); break; - case 5: robotData(id); break; - case 6: break loop; - } + loop: while (true) { + System.out.println("Was möchten Sie mit Ihrem Roboter tun?"); + System.out.println("1 -> Zustand des Roboters"); + System.out.println("2 -> AN oder Aus schalten"); + System.out.println("3 -> Roboter spricht"); + System.out.println("4 -> Letzte Fehlermeldung auslesen"); // Haben bzw. brauchen wir solch eine Funktion +// System.out.println("5 -> Daten des Roboters abrufen"); + System.out.println("6 -> Zurück ins Hauptmenü"); + + System.out.print("> "); + int input = Integer.parseInt(sc.nextLine()); + + switch (input) { + case 1: + robotStatus(id); + break; + case 2: + onoffbutton(id); + break; + case 3: + robotSpeak(id); + break; + case 4: + lastError(id); + break; +// case 5: +// robotData(id); +// break; + case 6: + break loop; + } } - - + } + /** * Gibt den Status des Roboters an + * * @param id */ private void robotStatus(int id) { - boolean status = fs.powerStatus(id); - if (status == true) + boolean status = fs.powerStatus(id); + if (status == true) System.out.println("Der Roboter ist angeschaltet."); - else + else System.out.println("Der Roboter ist ausgeschaltet."); } - + private void onoffbutton(int id) { boolean status = fs.triggerPower(id); if (status == true) System.out.println("Der Roboter wurde eingeschaltet."); else System.out.println("Der Roboter wurde ausgeschaltet."); - + System.out.println(); } - + private void robotSpeak(int id) { - + ArrayList arrayNumbers = new ArrayList<>(); boolean next = true; - - - System.out.println("Um den Robotersprechen zu lassen, müssen Sie eine beliebig lange Folge von ganzen Zahlen angeben"); + + System.out.println( + "Um den Robotersprechen zu lassen, müssen Sie eine beliebig lange Folge von ganzen Zahlen angeben"); System.out.println(); System.out.println("Geben Sie die 1. Zahl Ihrer Folge ein."); int num = Integer.parseInt(sc.nextLine()); arrayNumbers.add(num); - + int i = 2; while (next) { - - System.out.println("Geben Sie die " + i + ". Zahl Ihrer Folge ein." ); + + System.out.println("Geben Sie die " + i + ". Zahl Ihrer Folge ein."); num = Integer.parseInt(sc.nextLine()); arrayNumbers.add(num); - - System.out.println("Wenn Sie eine weiter Zahl eingeben möchten, wählen Sie (1). Wenn Sie die Eingabe beenden möchten (2)."); + + System.out.println( + "Wenn Sie eine weiter Zahl eingeben möchten, wählen Sie (1). Wenn Sie die Eingabe beenden möchten (2)."); int election = Integer.parseInt(sc.nextLine()); - + if (election == 1) { i++; next = true; - } - else { + } else { next = false; - int [] numbers = arrayNumbers.stream().mapToInt(j -> j).toArray(); - + int[] numbers = arrayNumbers.stream().mapToInt(j -> j).toArray(); + String output; try { output = fs.robotInstructions(id, numbers); System.out.println("Der Roboter gibt folgendes aus: " + output); - } - catch (RobotException e) { + } catch (RobotException e) { System.out.println("Fehler!"); } } - + } - - - + } - + private void lastError(int id) { System.out.println(fs.robotBlackbox(id)); - + } - - private void robotData(int id) { - System.out.println(fs.robotInfo(id)); - } - - } - + +// private void robotData(int id) { +// System.out.println(fs.robotInfo(id)); +// } + +}