From 4890c1602a37252c6d15a287fa40bb307a679670 Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Fri, 20 Feb 2026 01:05:51 +0100 Subject: [PATCH 1/2] Exchange class --- .../idi/idatt2003/g40/mappe/Exchange.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java index e69de29..b9d03d7 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java @@ -0,0 +1,81 @@ +package edu.ntnu.idi.idatt2003.g40.mappe; + +import java.math.BigDecimal; +import java.util.*; + +/** + * Represents a stock exchange where stocks can be traded. + */ +public class Exchange { + + private final String name; + private int week; + private final Map stockMap; + private final Random random; + + public Exchange(String name, List stocks) { + this.name = name; + this.week = 1; + this.stockMap = new HashMap<>(); + this.random = new Random(); + + for (Stock stock : stocks) { + stockMap.put(stock.getSymbol(), stock); + } + } + + public String getName() { + return name; + } + + public int getWeek() { + return week; + } + + public boolean hasStock(String symbol) { + return stockMap.containsKey(symbol); + } + + public Stock getStock(String symbol) { + return stockMap.get(symbol); + } + + public List findStocks(String searchTerm) { + List result = new ArrayList<>(); + for (Stock stock : stockMap.values()) { + if (stock.getSymbol().toLowerCase().contains(searchTerm.toLowerCase()) + || stock.getCompany().toLowerCase().contains(searchTerm.toLowerCase())) { + result.add(stock); + } + } + return result; + } + + public Transaction buy(String symbol, BigDecimal quantity, Player player) { + Stock stock = stockMap.get(symbol); + Share share = new Share(stock, quantity, stock.getSalesPrice()); + TransactionCalculator calculator = new PurchaseCalculator(share); + return new Purchase(share, week, calculator, player); + } + + public Transaction sell(Share share, Player player) { + TransactionCalculator calculator = new SaleCalculator(share); + return new Sale(share, week, calculator, player); + } + + * Advances the exchange to the next week and updates stock prices. + */ + public void advance() { + week++; + + for (Stock stock : stockMap.values()) { + BigDecimal currentPrice = stock.getSalesPrice(); + + double change = (random.nextDouble() * 0.10) - 0.05; + BigDecimal factor = BigDecimal.valueOf(1 + change); + + BigDecimal newPrice = currentPrice.multiply(factor); + stock.addNewSalesPrice(newPrice); + } + } +} \ No newline at end of file From 41d4a04ba4a1e53220407186e348c23008f5c1bb Mon Sep 17 00:00:00 2001 From: EspenTinius Date: Wed, 11 Mar 2026 14:46:54 +0100 Subject: [PATCH 2/2] Update Exchange.java --- src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java index b9d03d7..2083d6a 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Exchange.java @@ -63,8 +63,6 @@ public Transaction sell(Share share, Player player) { return new Sale(share, week, calculator, player); } - * Advances the exchange to the next week and updates stock prices. - */ public void advance() { week++;