From 00f8009e0da362667fd1fa93a38cdcdd920c0fac Mon Sep 17 00:00:00 2001 From: Vegard Bieker Matthey Date: Tue, 3 Mar 2026 04:22:55 +0100 Subject: [PATCH] oppgave: highscorelist --- .../oving6/highscorelist/HighscoreList.java | 79 +++++++++++++++++++ .../highscorelist/HighscoreListListener.java | 5 ++ .../highscorelist/HighscoreProgram.java | 35 ++++++++ ...a.unimplemented => HighscoreListTest.java} | 0 4 files changed, 119 insertions(+) create mode 100644 src/main/java/oving6/highscorelist/HighscoreList.java create mode 100644 src/main/java/oving6/highscorelist/HighscoreListListener.java create mode 100644 src/main/java/oving6/highscorelist/HighscoreProgram.java rename src/test/java/oving6/highscorelist/{HighscoreListTest.java.unimplemented => HighscoreListTest.java} (100%) diff --git a/src/main/java/oving6/highscorelist/HighscoreList.java b/src/main/java/oving6/highscorelist/HighscoreList.java new file mode 100644 index 0000000..140af4b --- /dev/null +++ b/src/main/java/oving6/highscorelist/HighscoreList.java @@ -0,0 +1,79 @@ +package oving6.highscorelist; + +import java.util.List; +import java.util.ArrayList; +import java.util.Collections; + +public class HighscoreList { + private int maxSize = 0; + private List results = new ArrayList(); + private ArrayList highscoreListListeners = new ArrayList(); + + HighscoreList(int maxSize) { + this.maxSize = maxSize; + } + + public int size() { + return results.size(); + } + + public int getElement(int i) { + if (i < 0 || i >= results.size()) { + throw new IllegalArgumentException("Invalid value for i"); + } + return results.get(i); + } + + public void addResult(int r) { + if (maxSize <= 0) { + return; + } + + int idx = results.size(); + + for (int i = 0; i < results.size(); i++) { + if (r < results.get(i)) { + idx = i; + break; + } + } + + if (results.size() < maxSize || idx < results.size()) { + results.add(r); + Collections.sort(results); + while (results.size() > maxSize) { + results.removeLast(); + } + sendHighscoreEvent(idx); + } + + } + + public void addHighscoreListListener(HighscoreListListener listener) { + highscoreListListeners.add(listener); + + } + + public void removeHighscoreListListener(HighscoreListListener listener) { + highscoreListListeners.remove(listener); + } + + private void sendHighscoreEvent(int i) { + for (HighscoreListListener listener : highscoreListListeners) { + listener.listChanged(this, i); + } + } + + @Override + public String toString() { + String s = "["; + for (int i = 0; i < results.size(); i++) { + s += results.get(i); + if (i < results.size() - 1) { + s += ","; + } + } + s += "]"; + return s; + } +} diff --git a/src/main/java/oving6/highscorelist/HighscoreListListener.java b/src/main/java/oving6/highscorelist/HighscoreListListener.java new file mode 100644 index 0000000..1c4e7d4 --- /dev/null +++ b/src/main/java/oving6/highscorelist/HighscoreListListener.java @@ -0,0 +1,5 @@ +package oving6.highscorelist; + +public interface HighscoreListListener { + void listChanged(HighscoreList l, int i); +} diff --git a/src/main/java/oving6/highscorelist/HighscoreProgram.java b/src/main/java/oving6/highscorelist/HighscoreProgram.java new file mode 100644 index 0000000..b06fda3 --- /dev/null +++ b/src/main/java/oving6/highscorelist/HighscoreProgram.java @@ -0,0 +1,35 @@ +package oving6.highscorelist; + +import java.util.Scanner; + +public class HighscoreProgram implements HighscoreListListener { + HighscoreList highscoreList; + + void main() { + init(); + run(); + } + + void init() { + highscoreList = new HighscoreList(10); + highscoreList.addHighscoreListListener(this); + } + + void run() { + System.out.println("Starting listener:"); + Scanner scanner = new Scanner(System.in); + while (true) { + if (scanner.hasNextInt()) { + highscoreList.addResult(scanner.nextInt()); + } else { + scanner.next(); + } + } + } + + @Override + public void listChanged(HighscoreList l, int i) { + System.out.println("List[" + i + "]: " + l.toString()); + } + +} diff --git a/src/test/java/oving6/highscorelist/HighscoreListTest.java.unimplemented b/src/test/java/oving6/highscorelist/HighscoreListTest.java similarity index 100% rename from src/test/java/oving6/highscorelist/HighscoreListTest.java.unimplemented rename to src/test/java/oving6/highscorelist/HighscoreListTest.java