diff --git a/src/main/java/reactivestreams/ColumnChecker.java b/src/main/java/reactivestreams/ColumnChecker.java index 4df362b..297be2b 100644 --- a/src/main/java/reactivestreams/ColumnChecker.java +++ b/src/main/java/reactivestreams/ColumnChecker.java @@ -13,4 +13,8 @@ public class ColumnChecker extends DigitBlockChecker { return currentColumn == column; } + @Override + public String toString() { + return getClass().getSimpleName() + " " + column; + } } diff --git a/src/main/java/reactivestreams/DigitBlockChecker.java b/src/main/java/reactivestreams/DigitBlockChecker.java index 655304f..77854d3 100644 --- a/src/main/java/reactivestreams/DigitBlockChecker.java +++ b/src/main/java/reactivestreams/DigitBlockChecker.java @@ -35,11 +35,12 @@ public abstract class DigitBlockChecker extends SubmissionPublisher imp if (digitsProcessed.contains(digit)) { submit(false); subscription.cancel(); - } - digitsProcessed.add(digit); - if (digitsProcessed.size() == 9) { - submit(true); - subscription.cancel(); + } else { + digitsProcessed.add(digit); + if (digitsProcessed.size() == 9) { + submit(true); + subscription.cancel(); + } } } } @@ -54,7 +55,7 @@ public abstract class DigitBlockChecker extends SubmissionPublisher imp @Override public void onComplete() { - close(); + // not called } } diff --git a/src/main/java/reactivestreams/RowChecker.java b/src/main/java/reactivestreams/RowChecker.java index 7212ef6..f4927c3 100644 --- a/src/main/java/reactivestreams/RowChecker.java +++ b/src/main/java/reactivestreams/RowChecker.java @@ -13,4 +13,8 @@ public class RowChecker extends DigitBlockChecker { return currentRow == row; } + @Override + public String toString() { + return getClass().getSimpleName() + " " + row; + } } diff --git a/src/main/java/reactivestreams/SquareChecker.java b/src/main/java/reactivestreams/SquareChecker.java index 4580e25..20bb299 100644 --- a/src/main/java/reactivestreams/SquareChecker.java +++ b/src/main/java/reactivestreams/SquareChecker.java @@ -27,4 +27,9 @@ public class SquareChecker extends DigitBlockChecker { return currentColumn >= fromColumn && currentColumn <= toColumn; } + @Override + public String toString() { + return getClass().getSimpleName() + " " + squareRow + "/" + squareColumn; + } + } diff --git a/src/main/java/reactivestreams/SudokuVerifier.java b/src/main/java/reactivestreams/SudokuVerifier.java index 8f2354b..6b3e384 100644 --- a/src/main/java/reactivestreams/SudokuVerifier.java +++ b/src/main/java/reactivestreams/SudokuVerifier.java @@ -30,13 +30,12 @@ public class SudokuVerifier implements Flow.Subscriber { } public boolean isSolved() { + int subscriberCount = digitPublisher.getSubscribers().size(); // Make publisher emit each digit digitStream.forEach(digitPublisher::submit); digitPublisher.close(); // Wait for checking subscribers to finish - int subscriberCount = digitPublisher.getSubscribers().size(); - while (true) { - if (!(finished.get() < subscriberCount && solved.get())) break; + while ((finished.get() < subscriberCount) && solved.get()) { justAMoment(); } return solved.get(); @@ -74,17 +73,17 @@ public class SudokuVerifier implements Flow.Subscriber { if (! solved) { this.solved.compareAndSet(true, false); } + finished.incrementAndGet(); } @Override public void onError(Throwable throwable) { System.err.println(throwable.fillInStackTrace()); finished.incrementAndGet(); - System.exit(1); } @Override public void onComplete() { - finished.incrementAndGet(); + // not called } }