package tpe.exceptions.roboter; import java.util.Arrays; import java.util.stream.Collectors; import tpe.exceptions.RobotException; import tpe.exceptions.RobotIllegalStateException; import tpe.exceptions.RobotMagicValueException; 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 * * @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; else 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; } } 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 */ public String speak(int[] zahlen) throws RobotException { 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("; ")); } } @Override public abstract int[] think(int[] zahlen) throws RobotException; }