From 6c781accb0de7e480faf8c64d49125610ccbda3e Mon Sep 17 00:00:00 2001 From: Benjamin Dweck Date: Sun, 14 Mar 2021 10:19:25 +0200 Subject: [PATCH] Made the interactive D8 entropy reader more forgiving for a better UX --- .../InteractiveDice8EntropyGenerator.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/rudefox/burrow/InteractiveDice8EntropyGenerator.java b/src/main/java/io/rudefox/burrow/InteractiveDice8EntropyGenerator.java index 9bc4fdd..450a3d7 100644 --- a/src/main/java/io/rudefox/burrow/InteractiveDice8EntropyGenerator.java +++ b/src/main/java/io/rudefox/burrow/InteractiveDice8EntropyGenerator.java @@ -12,15 +12,31 @@ public class InteractiveDice8EntropyGenerator extends InteractiveEntropyGenerato @Override protected String readNextEventSetString() { - String eventSetString = ""; - Pattern eventSetPattern = Pattern.compile(String.format("[1-8]{%d}", eventsPerEventSet)); + StringBuilder eventSetBuffer = new StringBuilder(); + int remainingEvents = eventsPerEventSet; + Pattern eventSetPattern = Pattern.compile("[1-8]+"); - while (!eventSetPattern.matcher(eventSetString).matches()) { - System.out.print("Input 11 x 8-sided dice rolls [1-8]: "); - eventSetString = inputScanner.next(); + while (remainingEvents > 0) { + + System.out.printf("Input %d x 8-sided dice rolls [1-8]: ", remainingEvents); + + String nextInput = inputScanner.next(); + + if (!eventSetPattern.matcher(nextInput).matches()) { + System.out.printf( + "Invalid input! Enter %d-digit sequence of digits from 1 to 8 (for example, 8765375812)" + System.lineSeparator(), + remainingEvents); + continue; + } + + eventSetBuffer.append(nextInput); + remainingEvents -= nextInput.length(); } - return eventSetString; + if (remainingEvents < 0) + System.out.printf("NOTE: Discarding the %d extra dice roll(s) entered" + System.lineSeparator(), -remainingEvents); + + return eventSetBuffer.substring(0, eventsPerEventSet); } @Override