From 4fd4bb407bae6eba2ca1e47242d1b368e9922d3c Mon Sep 17 00:00:00 2001 From: Benjamin Dweck Date: Sun, 14 Mar 2021 10:14:19 +0200 Subject: [PATCH] Made the interactive binary entropy reader more forgiving for a better UX --- .../InteractiveBinaryEntropyGenerator.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/rudefox/burrow/InteractiveBinaryEntropyGenerator.java b/src/main/java/io/rudefox/burrow/InteractiveBinaryEntropyGenerator.java index 38bcb06..36f93af 100644 --- a/src/main/java/io/rudefox/burrow/InteractiveBinaryEntropyGenerator.java +++ b/src/main/java/io/rudefox/burrow/InteractiveBinaryEntropyGenerator.java @@ -12,15 +12,31 @@ public class InteractiveBinaryEntropyGenerator extends InteractiveEntropyGenerat @Override protected String readNextEventSetString() { - String eventSetString = ""; - Pattern eventSetPattern = Pattern.compile(String.format("[0-1]{%d}", eventsPerEventSet)); + StringBuilder eventSetBuffer = new StringBuilder(); + int remainingEvents = eventsPerEventSet; + Pattern eventSetPattern = Pattern.compile("[01]+"); - while (!eventSetPattern.matcher(eventSetString).matches()) { - System.out.print("Input 33 coin tosses [0-1]: "); - eventSetString = inputScanner.next(); + while (remainingEvents > 0) { + + System.out.printf("Input %d coin tosses [0-1]: ", remainingEvents); + + String nextInput = inputScanner.next(); + + if (!eventSetPattern.matcher(nextInput).matches()) { + System.out.printf( + "Invalid input! Enter %d-digit sequence of 1's and 0's (for example, 1011101010)" + System.lineSeparator(), + remainingEvents); + continue; + } + + eventSetBuffer.append(nextInput); + remainingEvents -= nextInput.length(); } - return eventSetString; + if (remainingEvents < 0) + System.out.printf("NOTE: Discarding the %d extra coin toss(es) entered" + System.lineSeparator(), -remainingEvents); + + return eventSetBuffer.substring(0, eventsPerEventSet); } @Override