oppgave: highscorelist
This commit is contained in:
79
src/main/java/oving6/highscorelist/HighscoreList.java
Normal file
79
src/main/java/oving6/highscorelist/HighscoreList.java
Normal file
@@ -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<Integer> results = new ArrayList<Integer>();
|
||||
private ArrayList<HighscoreListListener> highscoreListListeners = new ArrayList<HighscoreListListener>();
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package oving6.highscorelist;
|
||||
|
||||
public interface HighscoreListListener {
|
||||
void listChanged(HighscoreList l, int i);
|
||||
}
|
||||
35
src/main/java/oving6/highscorelist/HighscoreProgram.java
Normal file
35
src/main/java/oving6/highscorelist/HighscoreProgram.java
Normal file
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user