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. --- .../service/mechanism/LmsrTradingMechanism.java | 4 +-- .../mechanism/OrderBookTradingMechanism.java | 4 +-- .../guess/service/mechanism/TradingMechanism.java | 4 +-- .../market/guess/ui/console/io/InputProcessor.java | 29 ++++++++++++++++++++++ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/service/src/main/java/market/guess/service/mechanism/LmsrTradingMechanism.java b/service/src/main/java/market/guess/service/mechanism/LmsrTradingMechanism.java index 02a63df..1904a04 100644 --- a/service/src/main/java/market/guess/service/mechanism/LmsrTradingMechanism.java +++ b/service/src/main/java/market/guess/service/mechanism/LmsrTradingMechanism.java @@ -23,13 +23,13 @@ public final class LmsrTradingMechanism implements TradingMechanism { } @Override - public BigDecimal costOfBuying(long[] q, int optionIndex, long quantity) { + public BigDecimal costOfBuying(int[] q, int optionIndex, int quantity) { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'costOfBuying'"); } @Override - public double[] prices(long[] q) { + public double[] prices(int[] q) { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'prices'"); } diff --git a/service/src/main/java/market/guess/service/mechanism/OrderBookTradingMechanism.java b/service/src/main/java/market/guess/service/mechanism/OrderBookTradingMechanism.java index 62feb02..5807e45 100644 --- a/service/src/main/java/market/guess/service/mechanism/OrderBookTradingMechanism.java +++ b/service/src/main/java/market/guess/service/mechanism/OrderBookTradingMechanism.java @@ -27,13 +27,13 @@ public final class OrderBookTradingMechanism implements TradingMechanism { } @Override - public BigDecimal costOfBuying(long[] q, int optionIndex, long quantity) { + public BigDecimal costOfBuying(int[] q, int optionIndex, int quantity) { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'costOfBuying'"); } @Override - public double[] prices(long[] q) { + public double[] prices(int[] q) { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'prices'"); } diff --git a/service/src/main/java/market/guess/service/mechanism/TradingMechanism.java b/service/src/main/java/market/guess/service/mechanism/TradingMechanism.java index d6e38bc..c2fc865 100644 --- a/service/src/main/java/market/guess/service/mechanism/TradingMechanism.java +++ b/service/src/main/java/market/guess/service/mechanism/TradingMechanism.java @@ -9,7 +9,7 @@ public interface TradingMechanism { BigDecimal openingCost(int optionCount); - BigDecimal costOfBuying(long[] q, int optionIndex, long quantity); + BigDecimal costOfBuying(int[] q, int optionIndex, int quantity); - double[] prices(long[] q); + double[] prices(int[] q); } 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