added Power, rewrite of speak

main
romanamo 2022-12-22 13:31:38 +01:00
parent 4e3852da9e
commit cdfdf10aac
7 changed files with 56 additions and 39 deletions

View File

@ -1,10 +1,16 @@
# RobotFactory # RobotFactory
## Style Guide ## Style Guide
* For every method you write you also write the JUnit test and comments. * For every method you write you also write the JUnit test and comments.
* [reference](https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html)
* Always mark the task you're currently working on the kanban board and move it to the right phase. * Always mark the task you're currently working on the kanban board and move it to the right phase.
## References
* [JavaDocs](https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html)
* [Markdown](https://www.markdownguide.org/extended-syntax/)
* [JUnit](https://junit.org/junit5/docs/current/user-guide/)
## Contributors ## Contributors
* Luc Dreibholz (Matr.Nr.: 2210544) * Luc Dreibholz (Matr.Nr.: 2210544)

View File

@ -3,22 +3,33 @@ package de.hsmannheim.informatik.name.domain;
import de.hsmannheim.informatik.name.domain.exceptions.RobotException; import de.hsmannheim.informatik.name.domain.exceptions.RobotException;
import de.hsmannheim.informatik.name.domain.exceptions.RobotIllegalStateException; import de.hsmannheim.informatik.name.domain.exceptions.RobotIllegalStateException;
import de.hsmannheim.informatik.name.domain.exceptions.RobotMagicValueException; import de.hsmannheim.informatik.name.domain.exceptions.RobotMagicValueException;
import de.hsmannheim.informatik.name.domain.robot_interfaces.Robot; import de.hsmannheim.informatik.name.domain.requirements.Robot;
public abstract class RobotBluePrint implements Robot { public abstract class RobotBluePrint implements Robot {
protected final int ID; protected final int ID;
protected final int MAGIC_NUMBER = 42;
private final String name; private final String name;
private boolean isPowered;
public RobotBluePrint(int id, String name) throws RobotIllegalStateException { public RobotBluePrint(int id, String name) throws RobotIllegalStateException {
if(!this.isValidID(id)) { if (!this.isValidID(id)) {
//TODO write own Exception //TODO write own Exception
throw new RobotIllegalStateException(); throw new RobotIllegalStateException();
} }
this.ID = id; this.ID = id;
this.name = name; this.name = name;
this.isPowered = false;
} }
/**
* Checks if an {@code int} represents a valid {@code ID},
* concerning a specific model within its own criteria
*
* @param id {@code ID} to check
* @return {@code true} if the ID is valid, else {@code false}
*/
protected abstract boolean isValidID(int id); protected abstract boolean isValidID(int id);
@Override @Override
@ -33,12 +44,12 @@ public abstract class RobotBluePrint implements Robot {
@Override @Override
public void triggerPowerSwitch() { public void triggerPowerSwitch() {
this.isPowered = !this.isPowered;
} }
@Override @Override
public boolean isPowerOn() { public boolean isPowerOn() {
return false; return this.isPowered;
} }
@Override @Override
@ -47,12 +58,8 @@ public abstract class RobotBluePrint implements Robot {
} }
@Override @Override
public String speak(int[] zahlen) throws RobotException, RobotMagicValueException { public abstract String speak(int[] zahlen) throws RobotException, RobotMagicValueException;
return null;
}
@Override @Override
public int[] think(int[] zahlen) throws RobotException, RobotMagicValueException { public abstract int[] think(int[] zahlen) throws RobotException, RobotMagicValueException;
return new int[0];
}
} }

View File

@ -1,5 +1,5 @@
/* (c) 2012 Thomas Smits */ /* (c) 2012 Thomas Smits */
package de.hsmannheim.informatik.name.domain.robot_interfaces; package de.hsmannheim.informatik.name.domain.requirements;
/** /**
* Interface für Roboter. * Interface für Roboter.

View File

@ -1,4 +1,4 @@
package de.hsmannheim.informatik.name.domain.robot_interfaces; package de.hsmannheim.informatik.name.domain.requirements;
import de.hsmannheim.informatik.name.domain.exceptions.RobotException; import de.hsmannheim.informatik.name.domain.exceptions.RobotException;

View File

@ -1,4 +1,4 @@
package de.hsmannheim.informatik.name.domain.robot_interfaces; package de.hsmannheim.informatik.name.domain.requirements;
import de.hsmannheim.informatik.name.domain.exceptions.RobotException; import de.hsmannheim.informatik.name.domain.exceptions.RobotException;
import de.hsmannheim.informatik.name.domain.exceptions.RobotIllegalStateException; import de.hsmannheim.informatik.name.domain.exceptions.RobotIllegalStateException;

View File

@ -4,7 +4,9 @@ import de.hsmannheim.informatik.name.domain.RobotBluePrint;
import de.hsmannheim.informatik.name.domain.exceptions.RobotException; import de.hsmannheim.informatik.name.domain.exceptions.RobotException;
import de.hsmannheim.informatik.name.domain.exceptions.RobotIllegalStateException; import de.hsmannheim.informatik.name.domain.exceptions.RobotIllegalStateException;
import de.hsmannheim.informatik.name.domain.exceptions.RobotMagicValueException; import de.hsmannheim.informatik.name.domain.exceptions.RobotMagicValueException;
import de.hsmannheim.informatik.name.domain.robot_interfaces.Robot;
import java.util.Arrays;
import java.util.stream.Collectors;
public abstract class StarWarsRobot extends RobotBluePrint { public abstract class StarWarsRobot extends RobotBluePrint {
@ -16,16 +18,6 @@ public abstract class StarWarsRobot extends RobotBluePrint {
SEPARATOR = separator; SEPARATOR = separator;
} }
@Override
public void triggerPowerSwitch() {
}
@Override
public boolean isPowerOn() {
return false;
}
@Override @Override
public RobotException getLastException() { public RobotException getLastException() {
return null; return null;
@ -33,29 +25,41 @@ public abstract class StarWarsRobot extends RobotBluePrint {
@Override @Override
public String speak(int[] zahlen) throws RobotException, RobotMagicValueException { public String speak(int[] zahlen) throws RobotException, RobotMagicValueException {
StringBuilder sb = new StringBuilder(); if (Arrays.stream(zahlen).anyMatch(i -> i == MAGIC_NUMBER)) {
//Loops through every element of zahlen[]
for (int i = 0; i < zahlen.length; i++) {
if (zahlen[i] == 42) {
throw new RobotMagicValueException(); throw new RobotMagicValueException();
} }
sb.append(zahlen[i]); return this.buildString(zahlen);
//if current number is not the last number add a separator
if (i != zahlen.length - 1) {
sb.append(SEPARATOR).append(" ");
}
}
return sb.toString();
} }
public abstract int[] think(int[] zahlen) throws RobotException, RobotMagicValueException; /**
* Creates a String representation of the given {@code payload},
* with separated values, by the delimiter {@code SEPARATOR}.
*
* @param payload {@code int[]} of elements
* @return {@link String representation} of the {@code payload}
*/
private String buildString(int[] payload) {
return Arrays.stream(payload).mapToObj(String::valueOf).collect(Collectors.joining(SEPARATOR + " "));
}
/**
* Helper-Method to swap Elements of a given {@code array}.
*
* @param arr {@code array} to swap Elements
* @param a Index of the first Element
* @param b Index of the second Element
*/
protected static void swap(int[] arr, int a, int b) { protected static void swap(int[] arr, int a, int b) {
int temp = arr[a]; int temp = arr[a];
arr[a] = arr[b]; arr[a] = arr[b];
arr[b] = temp; arr[b] = temp;
} }
/**
* Helper-Method to reverse an {@code array}.
*
* @param array {@code array} to reverse
*/
protected static void reverse(int[] array) { protected static void reverse(int[] array) {
for (int i = 0; i < array.length / 2; i++) { for (int i = 0; i < array.length / 2; i++) {
int temp = array[i]; int temp = array[i];

View File

@ -41,6 +41,6 @@ class R2D2SpeakTest {
@Test @Test
void speakTestMagicNumberException() throws RobotException { void speakTestMagicNumberException() throws RobotException {
assertThrows(RobotMagicValueException.class,() -> r2d2.speak(new int[]{42})); assertThrows(RobotMagicValueException.class, () -> r2d2.speak(new int[]{42}));
} }
} }