DN09 - Naloga 5 WIP
This commit is contained in:
parent
3702347f5d
commit
1f8feb3971
173
src/DN09.java
173
src/DN09.java
|
@ -1,7 +1,8 @@
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Scanner;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class DN09 {
|
public class DN09 {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
@ -10,6 +11,15 @@ public class DN09 {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (args[0].equals("pobratene")) {
|
||||||
|
ZgodovinaTekmovanj zgodovinaTekmovanj = ZgodovinaTekmovanj.izDatotek(args[1], args[2]);
|
||||||
|
assert zgodovinaTekmovanj != null;
|
||||||
|
|
||||||
|
zgodovinaTekmovanj.izpisiPobrateneDrzave(Integer.parseInt(args[3]));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Tekmovanje tekmovanje = Tekmovanje.izDatotek(args[1], args[2]);
|
Tekmovanje tekmovanje = Tekmovanje.izDatotek(args[1], args[2]);
|
||||||
assert tekmovanje != null;
|
assert tekmovanje != null;
|
||||||
|
|
||||||
|
@ -21,7 +31,7 @@ public class DN09 {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "izpisiTocke":
|
case "izpisiTocke":
|
||||||
tekmovanje.izpisiGlasove();
|
tekmovanje.izpisiTocke();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "najboljse":
|
case "najboljse":
|
||||||
|
@ -306,49 +316,128 @@ class UtezeniKriterij implements Kriterij {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Leto {
|
||||||
|
ArrayList<Tekmovalec> tekmovalci = new ArrayList<>();
|
||||||
|
HashMap<String, ArrayList<Glas>> glasovi = new LinkedHashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
class ZgodovinaTekmovanj {
|
class ZgodovinaTekmovanj {
|
||||||
private ArrayList<Tekmovanje> seznamTekmovanj;
|
ArrayList<Tekmovanje> seznamTekmovanj;
|
||||||
|
|
||||||
|
|
||||||
ZgodovinaTekmovanj(ArrayList<Tekmovanje> seznamTekmovanj) {
|
ZgodovinaTekmovanj(ArrayList<Tekmovanje> seznamTekmovanj) {
|
||||||
this.seznamTekmovanj = seznamTekmovanj;
|
this.seznamTekmovanj = seznamTekmovanj;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static ZgodovinaTekmovanj izDatotek(String datotekaTekmovalci, String datotekaGlasovi) {
|
public static ZgodovinaTekmovanj izDatotek(String datotekaTekmovalci, String datotekaGlasovi) {
|
||||||
// Scanner scannerTekmovalci, scannerGlasovi;
|
Scanner scannerTekmovalci, scannerGlasovi;
|
||||||
//
|
|
||||||
// try {
|
try {
|
||||||
// scannerTekmovalci = new Scanner(new File(datotekaTekmovalci));
|
scannerTekmovalci = new Scanner(new File(datotekaTekmovalci));
|
||||||
// scannerGlasovi = new Scanner(new File(datotekaGlasovi));
|
scannerGlasovi = new Scanner(new File(datotekaGlasovi));
|
||||||
// } catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// scannerTekmovalci.nextLine();
|
scannerTekmovalci.nextLine();
|
||||||
// scannerGlasovi.nextLine();
|
scannerGlasovi.nextLine();
|
||||||
//
|
|
||||||
// ArrayList<Tekmovalec> seznamTekmovalcev = new ArrayList<>();
|
Map<String, Leto> leta = new LinkedHashMap<>();
|
||||||
// while (scannerTekmovalci.hasNextLine()) {
|
|
||||||
// String[] fields = scannerTekmovalci.nextLine().split(";");
|
while (scannerGlasovi.hasNextLine()) {
|
||||||
// seznamTekmovalcev.add(new Tekmovalec(fields[1], fields[2], fields[3]));
|
String[] fields = scannerGlasovi.nextLine().split(";");
|
||||||
// }
|
Glas glas = switch (fields.length) {
|
||||||
//
|
case 7 -> new LocenGlas(fields[2], fields[3], Integer.parseInt(fields[4]),
|
||||||
// ArrayList<Glas> seznamGlasov = new ArrayList<>();
|
Integer.parseInt(fields[5]), Integer.parseInt(fields[6]));
|
||||||
// while (scannerGlasovi.hasNextLine()) {
|
case 6 -> new LocenGlas(fields[2], fields[3], Integer.parseInt(fields[4]),
|
||||||
// String[] fields = scannerGlasovi.nextLine().split(";");
|
Integer.parseInt(fields[5]), 0);
|
||||||
// switch (fields.length) {
|
default -> new Glas(fields[2], fields[3], Integer.parseInt(fields[4]));
|
||||||
// case 5:
|
};
|
||||||
// seznamGlasov.add(new Glas(fields[2], fields[3], Integer.parseInt(fields[4])));
|
|
||||||
// break;
|
if (!leta.containsKey(fields[0])) {
|
||||||
// case 6:
|
leta.put(fields[0], new Leto());
|
||||||
// seznamGlasov.add(new LocenGlas(fields[2], fields[3], Integer.parseInt(fields[4]),
|
}
|
||||||
// Integer.parseInt(fields[5]), 0));
|
Map<String, ArrayList<Glas>> glasovi = leta.get(fields[0]).glasovi;
|
||||||
// break;
|
|
||||||
// case 7:
|
if (!glasovi.containsKey(fields[1])) {
|
||||||
// seznamGlasov.add(new LocenGlas(fields[2], fields[3], Integer.parseInt(fields[4]),
|
glasovi.put(fields[1], new ArrayList<>());
|
||||||
// Integer.parseInt(fields[5]), Integer.parseInt(fields[6])));
|
}
|
||||||
// break;
|
glasovi.get(fields[1]).add(glas);
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
// }
|
while (scannerTekmovalci.hasNextLine()) {
|
||||||
|
String[] fields = scannerTekmovalci.nextLine().split(";");
|
||||||
|
Tekmovalec tekmovalec = new Tekmovalec(fields[1], fields[2], fields[3]);
|
||||||
|
|
||||||
|
leta.get(fields[0]).tekmovalci.add(tekmovalec);
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<Tekmovanje> tekmovanja = new ArrayList<>();
|
||||||
|
|
||||||
|
for (String leto : leta.keySet()) {
|
||||||
|
for (String krog : leta.get(leto).glasovi.keySet()) {
|
||||||
|
tekmovanja.add(new Tekmovanje(leta.get(leto).tekmovalci, leta.get(leto).glasovi.get(krog)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ZgodovinaTekmovanj(tekmovanja);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getSkupnoSteviloTock(String drzava) {
|
||||||
|
int tocke = 0;
|
||||||
|
for (Tekmovanje tekmovanje : seznamTekmovanj) {
|
||||||
|
tocke += tekmovanje.steviloTock(drzava);
|
||||||
|
}
|
||||||
|
return tocke;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float povprecnaUvrstitev(String drzava) {
|
||||||
|
int sum = 0, count = 0;
|
||||||
|
for (Tekmovanje tekmovanje : seznamTekmovanj) {
|
||||||
|
int mesto = tekmovanje.getMesto(drzava);
|
||||||
|
if (mesto == -1) continue;
|
||||||
|
sum += tekmovanje.getMesto(drzava);
|
||||||
|
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return (float) sum / count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int najboljsaUvrstitev(String drzava) {
|
||||||
|
int min = Integer.MAX_VALUE;
|
||||||
|
for (Tekmovanje tekmovanje : seznamTekmovanj) {
|
||||||
|
int mesto = tekmovanje.getMesto(drzava);
|
||||||
|
if (mesto == -1) continue;
|
||||||
|
if (mesto < min) {
|
||||||
|
min = mesto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void izpisiPobrateneDrzave(int topN) {
|
||||||
|
System.out.println("Drzave z najvec medsebojnih glasov:");
|
||||||
|
|
||||||
|
Map<String, Integer> tocke = new LinkedHashMap<>();
|
||||||
|
for (Tekmovanje tekmovanje : seznamTekmovanj) {
|
||||||
|
for (Glas glas : tekmovanje.getSeznamGlasov()) {
|
||||||
|
String key = Stream.of(glas.getOdDrzave(), glas.getZaDrzavo()).sorted().collect(Collectors.joining(":"));
|
||||||
|
tocke.put(key, tocke.getOrDefault(key, 0) + glas.getStTock());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Integer> sortirane = tocke.entrySet().stream()
|
||||||
|
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
|
||||||
|
.limit(Math.min(topN, tocke.size()))
|
||||||
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, LinkedHashMap::new));
|
||||||
|
|
||||||
|
int n = 1;
|
||||||
|
for (String key : sortirane.keySet()) {
|
||||||
|
int t = sortirane.get(key);
|
||||||
|
String[] drzave = key.split(":");
|
||||||
|
System.out.printf("%d. %s <-(%dt)-> %s\n", n, drzave[0], t, drzave[1]);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
123
src/DN09Test05.java
Normal file
123
src/DN09Test05.java
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class DN09Test05 {
|
||||||
|
|
||||||
|
Tekmovanje miniTekmovanje;
|
||||||
|
Tekmovanje praznoTekmovanje;
|
||||||
|
|
||||||
|
ZgodovinaTekmovanj miniZgodovinaTekmovanj;
|
||||||
|
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
ArrayList<Tekmovalec> seznamTekmovalcev = new ArrayList<>(Arrays.asList(
|
||||||
|
new Tekmovalec("Češka", "Vesna", "My Sister's Crown"),
|
||||||
|
new Tekmovalec("Armenija", "Brunette", "Future Lover"),
|
||||||
|
new Tekmovalec("Islandija", "Diljá", "Power")
|
||||||
|
));
|
||||||
|
|
||||||
|
ArrayList<Glas> seznamGlasov = new ArrayList<>(Arrays.asList(
|
||||||
|
new Glas("Češka", "Islandija", 6),
|
||||||
|
new Glas("Armenija", "Islandija", 6),
|
||||||
|
new Glas("Armenija", "Češka", 4),
|
||||||
|
new Glas("Islandija", "Češka", 0)
|
||||||
|
));
|
||||||
|
|
||||||
|
miniTekmovanje = new Tekmovanje(seznamTekmovalcev, seznamGlasov);
|
||||||
|
|
||||||
|
// Prazno tekmovanje
|
||||||
|
praznoTekmovanje = new Tekmovanje(new ArrayList<>(), new ArrayList<>());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConstructor() {
|
||||||
|
//Testira razred zgodovinaTekmovanj
|
||||||
|
// Konstruktor mora ustrezno nastaviti zgodovino tekmovanj
|
||||||
|
miniZgodovinaTekmovanj = new ZgodovinaTekmovanj(new ArrayList<>(Arrays.asList(miniTekmovanje, miniTekmovanje)));
|
||||||
|
Assert.assertNotNull(miniZgodovinaTekmovanj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBranjePodatkov() {
|
||||||
|
// Testira branje podatkov
|
||||||
|
// Metoda izDatotek mora ustrezno delovati
|
||||||
|
ZgodovinaTekmovanj zgodovinaTekmovanj = ZgodovinaTekmovanj.izDatotek("viri/tekmovalci_sample.csv", "viri/glasovi_sample.csv");
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.seznamTekmovanj.get(0).getSeznamTekmovalcev().get(0).getDrzava(), "Švedska");
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.seznamTekmovanj.get(2).getSeznamTekmovalcev().get(5).getDrzava(), "Ukrajina");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSkupnoSteviloTock() {
|
||||||
|
// Testira skupno število točk
|
||||||
|
miniZgodovinaTekmovanj = new ZgodovinaTekmovanj(new ArrayList<>(Arrays.asList(miniTekmovanje, miniTekmovanje)));
|
||||||
|
Assert.assertEquals(miniZgodovinaTekmovanj.getSkupnoSteviloTock("Islandija"), 24);
|
||||||
|
Assert.assertEquals(miniZgodovinaTekmovanj.getSkupnoSteviloTock("Armenija"), 0);
|
||||||
|
|
||||||
|
ZgodovinaTekmovanj zgodovinaTekmovanj = ZgodovinaTekmovanj.izDatotek("viri/tekmovalci_sample.csv", "viri/glasovi_sample.csv");
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.getSkupnoSteviloTock("Islandija"), 146);
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.getSkupnoSteviloTock("Armenija"), 156);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPovprecnaUvrstitev() {
|
||||||
|
// Testira povprečno uvrstitev
|
||||||
|
miniZgodovinaTekmovanj = new ZgodovinaTekmovanj(new ArrayList<>(Arrays.asList(miniTekmovanje, miniTekmovanje)));
|
||||||
|
Assert.assertEquals(miniZgodovinaTekmovanj.povprecnaUvrstitev("Islandija"), 1, 0.01);
|
||||||
|
Assert.assertEquals(miniZgodovinaTekmovanj.povprecnaUvrstitev("Armenija"), 3, 0.01);
|
||||||
|
Assert.assertEquals(miniZgodovinaTekmovanj.povprecnaUvrstitev("Češka"), 2, 0.01);
|
||||||
|
|
||||||
|
ZgodovinaTekmovanj zgodovinaTekmovanj = ZgodovinaTekmovanj.izDatotek("viri/tekmovalci_sample.csv", "viri/glasovi_sample.csv");
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.povprecnaUvrstitev("Islandija"), 22, 0.01);
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.povprecnaUvrstitev("Armenija"), 15, 0.01);
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.povprecnaUvrstitev("Češka"), 22, 0.01);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNajboljsaUvrstitev() {
|
||||||
|
// Testira najboljšo uvrstitev
|
||||||
|
miniZgodovinaTekmovanj = new ZgodovinaTekmovanj(new ArrayList<>(Arrays.asList(miniTekmovanje, miniTekmovanje)));
|
||||||
|
Assert.assertEquals(miniZgodovinaTekmovanj.najboljsaUvrstitev("Islandija"), 1);
|
||||||
|
Assert.assertEquals(miniZgodovinaTekmovanj.najboljsaUvrstitev("Armenija"), 3);
|
||||||
|
Assert.assertEquals(miniZgodovinaTekmovanj.najboljsaUvrstitev("Češka"), 2);
|
||||||
|
|
||||||
|
ZgodovinaTekmovanj zgodovinaTekmovanj = ZgodovinaTekmovanj.izDatotek("viri/tekmovalci_sample.csv", "viri/glasovi_sample.csv");
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.najboljsaUvrstitev("Islandija"), 2);
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.najboljsaUvrstitev("Armenija"), 14);
|
||||||
|
Assert.assertEquals(zgodovinaTekmovanj.najboljsaUvrstitev("Češka"), 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPobrateneDrzave() {
|
||||||
|
// Testira pobratene države
|
||||||
|
PrintStream orig = System.out;
|
||||||
|
final ByteArrayOutputStream myOut = new ByteArrayOutputStream();
|
||||||
|
System.setOut(new PrintStream(myOut));
|
||||||
|
|
||||||
|
ZgodovinaTekmovanj zgodovinaTekmovanj = ZgodovinaTekmovanj.izDatotek("viri/tekmovalci_sample.csv", "viri/glasovi_sample.csv");
|
||||||
|
|
||||||
|
zgodovinaTekmovanj.izpisiPobrateneDrzave(5);
|
||||||
|
|
||||||
|
final String stdOut = myOut.toString();
|
||||||
|
System.setOut(orig);
|
||||||
|
|
||||||
|
String expected = "Drzave z najvec medsebojnih glasov:\n" +
|
||||||
|
"1. Norveška <-(74t)-> Švedska\n" +
|
||||||
|
"2. Estonija <-(59t)-> Švedska\n" +
|
||||||
|
"3. Belgija <-(54t)-> Švedska\n" +
|
||||||
|
"4. Hrvaška <-(53t)-> Slovenija\n" +
|
||||||
|
"5. Islandija <-(51t)-> Švedska\n";
|
||||||
|
|
||||||
|
Assert.assertEquals(stdOut.trim().replace("\r", ""), expected.trim().replace("\r", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user