From d77a70c48865592be9029aeb0c83b36c162ea31a Mon Sep 17 00:00:00 2001 From: Kostya Date: Fri, 14 Aug 2026 20:54:31 +0000 Subject: Switch TradingMechanism quantities to int, add yes/no and select prompts TradingMechanism's q/quantity params move from long/long[] to int/int[] to match the rest of the domain (Trade.quantity, Option counts, etc. are already int). Add InputProcessor.readYesNo and readSelect for upcoming menu commands that need a confirm prompt or a pick-from-list prompt. --- .../market/guess/ui/console/io/InputProcessor.java | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'ui-console/src') diff --git a/ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java b/ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java index 4889c36..fc5422f 100644 --- a/ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java +++ b/ui-console/src/main/java/market/guess/ui/console/io/InputProcessor.java @@ -1,6 +1,8 @@ package market.guess.ui.console.io; +import java.util.List; import java.util.Scanner; +import java.util.function.Function; public final class InputProcessor { private final Scanner scanner = new Scanner(System.in); @@ -67,6 +69,33 @@ public final class InputProcessor { } } + public boolean readYesNo(String prompt) { + while (true) { + var raw = readLine("%s [Y/N]: ".formatted(prompt)).toLowerCase(); + + switch (raw) { + case "y", "yes" -> { + return true; + } + case "n", "no" -> { + return false; + } + default -> IO.println("Please answer y/yes or n/no."); + } + } + } + + public T readSelect(String prompt, List items, Function function) { + + for (var i = 0; i < items.size(); i++) { + IO.println(" [%d]->> %s".formatted(i + 1, function.apply(items.get(i)))); + } + + var pick = readInt(prompt, 1, items.size()); + + return items.get(pick - 1); + } + private String nextLine() { return scanner.hasNextLine() ? scanner.nextLine() : null; } -- cgit v1.2.3