mal sehen was eclipse jetzt kaputt macht

This commit is contained in:
Johannes Theiner 2018-06-13 00:47:07 +02:00
parent 10c49e3a77
commit c7a7cf0831
28 changed files with 2032 additions and 2033 deletions

4
.gitignore vendored
View File

@ -1,3 +1,3 @@
Java 2.iml Java 2.iml
java2.iml java2.iml
target target

View File

@ -1,13 +1,13 @@
<img src="https://teamcity.torchwood.joethei.de/app/rest/builds/buildType:(id:Studium_Java2)/statusIcon"> <img src="https://teamcity.torchwood.joethei.de/app/rest/builds/buildType:(id:Studium_Java2)/statusIcon">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=alert_status"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=alert_status">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=vulnerabilities"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=vulnerabilities">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=bugs"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=bugs">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=coverage"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=coverage">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=code_smells"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=code_smells">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=sqale_rating"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=sqale_rating">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=ncloc"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=ncloc">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=sqale_index"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=sqale_index">
<img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=reliability_rating"> <img src="https://sonarqube.torchwood.joethei.de/api/project_badges/measure?project=Java_2&metric=reliability_rating">

116
pom.xml
View File

@ -1,59 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<name>Java 2</name> <name>Java 2</name>
<groupId>de.joethei.hs</groupId> <groupId>de.joethei.hs</groupId>
<artifactId>java2</artifactId> <artifactId>java2</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version> <version>3.7.0</version>
<configuration> <configuration>
<source>1.8</source> <source>1.8</source>
<target>1.8</target> <target>1.8</target>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version> <version>2.19.1</version>
<configuration> <configuration>
<test>de.joethei.hs.java2.tests.*</test> <test>de.joethei.hs.java2.tests.*</test>
</configuration> </configuration>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.junit.platform</groupId> <groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId> <artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.1</version> <version>1.0.1</version>
</dependency> </dependency>
</dependencies> </dependencies>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<version>4.12</version> <version>4.12</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.junit.vintage</groupId> <groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId> <artifactId>junit-vintage-engine</artifactId>
<version>4.12.1</version> <version>4.12.1</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -1,159 +1,159 @@
package de.joethei.hs.java2.praktikum.praktikum1; package de.joethei.hs.java2.praktikum.praktikum1;
public class GrosseZahl { public class GrosseZahl {
private int zahl[]; private int zahl[];
public GrosseZahl(String d) { public GrosseZahl(String d) {
Boolean korrekteEingabe=true; Boolean korrekteEingabe=true;
for(int i=0; i<d.length(); i++) { for(int i=0; i<d.length(); i++) {
if(d.charAt(i) < '0' || d.charAt(i) > '9') { if(d.charAt(i) < '0' || d.charAt(i) > '9') {
korrekteEingabe = false; korrekteEingabe = false;
} }
} }
if(korrekteEingabe) { if(korrekteEingabe) {
zahl = new int[d.length()]; zahl = new int[d.length()];
for(int w=0; w<d.length(); w++) { for(int w=0; w<d.length(); w++) {
zahl[w] = Integer.parseInt(String.valueOf(d.charAt(w))); zahl[w] = Integer.parseInt(String.valueOf(d.charAt(w)));
} }
} else { } else {
throw new IllegalArgumentException("falscher Input"); throw new IllegalArgumentException("falscher Input");
} }
} }
public GrosseZahl(int i) { public GrosseZahl(int i) {
this(Integer.toString(i)); this(Integer.toString(i));
} }
public boolean less(GrosseZahl b) { public boolean less(GrosseZahl b) {
if(this.zahl.length < b.zahl.length) return true; if(this.zahl.length < b.zahl.length) return true;
if(this.zahl.length > b.zahl.length) return false; if(this.zahl.length > b.zahl.length) return false;
for(int i = 0; i<this.zahl.length; i++) { for(int i = 0; i<this.zahl.length; i++) {
if(this.zahl[i] > b.zahl[i]) return false; if(this.zahl[i] > b.zahl[i]) return false;
if(this.zahl[i] < b.zahl[i]) return true; if(this.zahl[i] < b.zahl[i]) return true;
} }
return false; return false;
} }
public GrosseZahl add(GrosseZahl b) { public GrosseZahl add(GrosseZahl b) {
int uebertrag = 0; int uebertrag = 0;
GrosseZahl rueckgabe, operand; GrosseZahl rueckgabe, operand;
if(this.less(b)) { if(this.less(b)) {
rueckgabe = new GrosseZahl(b.toString()); rueckgabe = new GrosseZahl(b.toString());
operand = new GrosseZahl(this.toString()); operand = new GrosseZahl(this.toString());
} else { } else {
rueckgabe = new GrosseZahl(this.toString()); rueckgabe = new GrosseZahl(this.toString());
operand = new GrosseZahl(b.toString()); operand = new GrosseZahl(b.toString());
} }
for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) { for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) {
rueckgabe.zahl[i] += uebertrag; rueckgabe.zahl[i] += uebertrag;
uebertrag = 0; uebertrag = 0;
if(w>=0) { if(w>=0) {
rueckgabe.zahl[i] += operand.zahl[w]; rueckgabe.zahl[i] += operand.zahl[w];
} }
if(rueckgabe.zahl[i] > 9) { if(rueckgabe.zahl[i] > 9) {
rueckgabe.zahl[i] -= 10; rueckgabe.zahl[i] -= 10;
uebertrag = 1; uebertrag = 1;
} }
if(i==0 && uebertrag==1) { if(i==0 && uebertrag==1) {
return new GrosseZahl("1"+rueckgabe.toString()); return new GrosseZahl("1"+rueckgabe.toString());
} }
} }
return rueckgabe; return rueckgabe;
} }
public GrosseZahl sub(GrosseZahl b) { public GrosseZahl sub(GrosseZahl b) {
int uebertrag = 0; int uebertrag = 0;
StringBuilder x; StringBuilder x;
if(this.equals(b)) { if(this.equals(b)) {
return new GrosseZahl(0); return new GrosseZahl(0);
} else if(this.less(b)) { } else if(this.less(b)) {
return new GrosseZahl(0); return new GrosseZahl(0);
} }
GrosseZahl rueckgabe = new GrosseZahl(this.toString()); GrosseZahl rueckgabe = new GrosseZahl(this.toString());
GrosseZahl operand = new GrosseZahl(b.toString()); GrosseZahl operand = new GrosseZahl(b.toString());
for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) { for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) {
if(w>=0) { if(w>=0) {
rueckgabe.zahl[i] -= operand.zahl[w]; rueckgabe.zahl[i] -= operand.zahl[w];
} }
rueckgabe.zahl[i] -= uebertrag; rueckgabe.zahl[i] -= uebertrag;
uebertrag = 0; uebertrag = 0;
if(rueckgabe.zahl[i] < 0) { if(rueckgabe.zahl[i] < 0) {
rueckgabe.zahl[i] += 10; rueckgabe.zahl[i] += 10;
uebertrag += 1; uebertrag += 1;
} }
} }
while(rueckgabe.zahl[0] == 0) { while(rueckgabe.zahl[0] == 0) {
x = new StringBuilder(); x = new StringBuilder();
for(int i = 1; i<rueckgabe.zahl.length; i++) { for(int i = 1; i<rueckgabe.zahl.length; i++) {
x.append(rueckgabe.zahl[i]); x.append(rueckgabe.zahl[i]);
} }
rueckgabe = new GrosseZahl(x.toString()); rueckgabe = new GrosseZahl(x.toString());
} }
return rueckgabe; return rueckgabe;
} }
public GrosseZahl mult(GrosseZahl b) { public GrosseZahl mult(GrosseZahl b) {
GrosseZahl rueckgabe, rueckgabe_b, operand, operand2; GrosseZahl rueckgabe, rueckgabe_b, operand, operand2;
rueckgabe_b = new GrosseZahl(0); rueckgabe_b = new GrosseZahl(0);
if(this.less(b)) { if(this.less(b)) {
operand2 = b; operand2 = b;
operand = this; operand = this;
} else { } else {
operand2 = this; operand2 = this;
operand = b; operand = b;
} }
for(int i = 0; i<operand.zahl.length; i++) { for(int i = 0; i<operand.zahl.length; i++) {
rueckgabe = new GrosseZahl(0); rueckgabe = new GrosseZahl(0);
for(int w = 0; w<operand.zahl[i]; w++) { for(int w = 0; w<operand.zahl[i]; w++) {
rueckgabe = rueckgabe.add(operand2); rueckgabe = rueckgabe.add(operand2);
} }
rueckgabe_b = rueckgabe_b.add(rueckgabe); rueckgabe_b = rueckgabe_b.add(rueckgabe);
if(i != operand.zahl.length-1) { if(i != operand.zahl.length-1) {
rueckgabe_b = new GrosseZahl(rueckgabe_b.toString()+"0"); rueckgabe_b = new GrosseZahl(rueckgabe_b.toString()+"0");
} }
} }
return rueckgabe_b; return rueckgabe_b;
} }
public int length() { public int length() {
return zahl.length; return zahl.length;
} }
public int numberAt(int i) { public int numberAt(int i) {
return zahl[i]; return zahl[i];
} }
public GrosseZahl ggT(GrosseZahl b) { public GrosseZahl ggT(GrosseZahl b) {
GrosseZahl operand1 = new GrosseZahl(this.toString()); GrosseZahl operand1 = new GrosseZahl(this.toString());
GrosseZahl operand2 = new GrosseZahl(b.toString()); GrosseZahl operand2 = new GrosseZahl(b.toString());
if(operand1.equals(operand2)) return operand1; if(operand1.equals(operand2)) return operand1;
else if(operand1.less(operand2)) return operand1.ggT(operand2.sub(operand1)); else if(operand1.less(operand2)) return operand1.ggT(operand2.sub(operand1));
else return operand1.sub(operand2).ggT(operand2); else return operand1.sub(operand2).ggT(operand2);
} }
@Override @Override
public String toString() { public String toString() {
StringBuilder rueckgabe = new StringBuilder(); StringBuilder rueckgabe = new StringBuilder();
for (int aZahl : zahl) { for (int aZahl : zahl) {
rueckgabe.append(Integer.toString(aZahl)); rueckgabe.append(Integer.toString(aZahl));
} }
return rueckgabe.toString(); return rueckgabe.toString();
} }
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if(o instanceof GrosseZahl) { if(o instanceof GrosseZahl) {
GrosseZahl tmp = (GrosseZahl) o; GrosseZahl tmp = (GrosseZahl) o;
if(tmp.zahl.length == this.zahl.length) { if(tmp.zahl.length == this.zahl.length) {
for(int i = this.zahl.length - 1; i >= 0; i--) { for(int i = this.zahl.length - 1; i >= 0; i--) {
if(tmp.zahl[i] != this.zahl[i]) return false; if(tmp.zahl[i] != this.zahl[i]) return false;
} }
return true; return true;
}else return false; }else return false;
} }
return false; return false;
} }
} }

View File

@ -1,19 +1,19 @@
Entwickeln Sie eine Klasse GrosseZahl, die ganze Zahlen >=0 repräsentiert. Negative Zahlen werden zur Vereinfachung nicht berücksichtigt. Die Klasse ist nicht durch den Wertebereich primitiver Typen begrenzt, sondern speichert ein Feld (int-Array, keine ArrayList!) mit den Dezimalziffern einer Zahl. Entwickeln Sie eine Klasse GrosseZahl, die ganze Zahlen >=0 repräsentiert. Negative Zahlen werden zur Vereinfachung nicht berücksichtigt. Die Klasse ist nicht durch den Wertebereich primitiver Typen begrenzt, sondern speichert ein Feld (int-Array, keine ArrayList!) mit den Dezimalziffern einer Zahl.
Definieren Sie folgende Methoden: Definieren Sie folgende Methoden:
GrosseZahl(String d) GrosseZahl(String d)
Erzeugt eine Zahl, deren Dezimaldarstellung in d gegeben ist. d besteht ausschließlich aus Dezimalziffern. Erzeugt eine Zahl, deren Dezimaldarstellung in d gegeben ist. d besteht ausschließlich aus Dezimalziffern.
GrosseZahl(int i) GrosseZahl(int i)
Erzeugt eine Zahl mit dem Wert von i. Erzeugt eine Zahl mit dem Wert von i.
String toString() String toString()
Gibt die Zahl als String zurück. Gibt die Zahl als String zurück.
boolean less(GrosseZahl b) boolean less(GrosseZahl b)
Liefert true, wenn diese Zahl echt kleiner als b ist. Liefert true, wenn diese Zahl echt kleiner als b ist.
GrosseZahl add(GrosseZahl b) GrosseZahl add(GrosseZahl b)
Liefert eine neue Zahl mit der Summe dieser Zahl und b. Das this-Objekt wird nicht verändert. Liefert eine neue Zahl mit der Summe dieser Zahl und b. Das this-Objekt wird nicht verändert.
GrosseZahl mult(GrosseZahl b) GrosseZahl mult(GrosseZahl b)
Liefert eine neue Zahl mit dem Produkt dieser Zahl und b. Das this-Objekt wird nicht verändert. Hinweis: Sie können dazu die add-Methode nutzen! Liefert eine neue Zahl mit dem Produkt dieser Zahl und b. Das this-Objekt wird nicht verändert. Hinweis: Sie können dazu die add-Methode nutzen!
GrosseZahl ggT(GrosseZahl b) GrosseZahl ggT(GrosseZahl b)
Liefert den größten gemeinsamen Teiler (ggt) dieser Zahl und b zurück. Das this-Objekt wird nicht verändert. Die Berechnung muss rekursiv(!) nach dem klassischen euklidischen Algorithmus erfolgen. Nach diesem wird immer die kleinere Zahl von der größeren Zahl abgezogen, bis beide Zahlen gleich groß sind. Dieses Ergebnis ist dann der ggT. Liefert den größten gemeinsamen Teiler (ggt) dieser Zahl und b zurück. Das this-Objekt wird nicht verändert. Die Berechnung muss rekursiv(!) nach dem klassischen euklidischen Algorithmus erfolgen. Nach diesem wird immer die kleinere Zahl von der größeren Zahl abgezogen, bis beide Zahlen gleich groß sind. Dieses Ergebnis ist dann der ggT.
Die Verwendung der Klasse BigInteger aus der Java-Bibliothek ist für diese Aufgabe nicht erlaubt! Sie dürfen und sollten aber eigene Hilfsmethoden (private) hinzufügen, um sich die Lösung der Aufgaben zu erleichtern. Die Verwendung der Klasse BigInteger aus der Java-Bibliothek ist für diese Aufgabe nicht erlaubt! Sie dürfen und sollten aber eigene Hilfsmethoden (private) hinzufügen, um sich die Lösung der Aufgaben zu erleichtern.

View File

@ -1,107 +1,107 @@
package de.joethei.hs.java2.praktikum.praktikum2; package de.joethei.hs.java2.praktikum.praktikum2;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
public class CharCollection implements Cloneable{ public class CharCollection implements Cloneable{
private List<Character> list = new ArrayList<>(); private List<Character> list = new ArrayList<>();
public CharCollection(char... cc) { public CharCollection(char... cc) {
for(char c:cc) this.list.add(c); for(char c:cc) this.list.add(c);
} }
public CharCollection(String s) { public CharCollection(String s) {
for(char c : s.toCharArray()) { for(char c : s.toCharArray()) {
this.list.add(c); this.list.add(c);
} }
} }
public int size() { public int size() {
return this.list.size(); return this.list.size();
} }
public int count(char c) { public int count(char c) {
int result = 0; int result = 0;
for(char b:list) { for(char b:list) {
if(b == c)result ++; if(b == c)result ++;
} }
return result; return result;
} }
public int different() { public int different() {
Set<Character> set = new HashSet<>(list); Set<Character> set = new HashSet<>(list);
return set.size(); return set.size();
} }
public char top() { public char top() {
if(list.isEmpty()) return 0; if(list.isEmpty()) return 0;
int max = 0; int max = 0;
char character ='_'; char character ='_';
for(char c : list) { for(char c : list) {
int count = count(c); int count = count(c);
if(count >= max) { if(count >= max) {
character = c; character = c;
max = count; max = count;
} }
} }
return character; return character;
} }
public CharCollection moreThan(int m) { public CharCollection moreThan(int m) {
ArrayList<Character> list2 = new ArrayList<>(); ArrayList<Character> list2 = new ArrayList<>();
for(char c:this.list){ for(char c:this.list){
if(this.count(c) > m) { if(this.count(c) > m) {
list2.add(c); list2.add(c);
} }
} }
StringBuilder s = new StringBuilder(); StringBuilder s = new StringBuilder();
for(char c:list2) s.append(c); for(char c:list2) s.append(c);
return new CharCollection(s.toString()); return new CharCollection(s.toString());
} }
public CharCollection except(CharCollection cc) { public CharCollection except(CharCollection cc) {
ArrayList<Character> list= new ArrayList<>(this.list); ArrayList<Character> list= new ArrayList<>(this.list);
boolean removeCharacterOnce = false; boolean removeCharacterOnce = false;
for(int i=0; i<list.size(); i++){ for(int i=0; i<list.size(); i++){
for(int w=0; w<cc.list.size(); w++) { for(int w=0; w<cc.list.size(); w++) {
if(cc.list.get(w)==list.get(i) && !removeCharacterOnce) { if(cc.list.get(w)==list.get(i) && !removeCharacterOnce) {
removeCharacterOnce=true; removeCharacterOnce=true;
cc.list.remove(w); cc.list.remove(w);
list.remove(i); list.remove(i);
} }
} }
if(removeCharacterOnce) i--; if(removeCharacterOnce) i--;
removeCharacterOnce = false; removeCharacterOnce = false;
} }
StringBuilder s = new StringBuilder(); StringBuilder s = new StringBuilder();
for(char c:list) s.append(c); for(char c:list) s.append(c);
return new CharCollection(s.toString()); return new CharCollection(s.toString());
} }
public boolean isSubset(CharCollection cc) { public boolean isSubset(CharCollection cc) {
ArrayList<Character> list = new ArrayList<>(this.list); ArrayList<Character> list = new ArrayList<>(this.list);
for(char c:cc.list) { for(char c:cc.list) {
if(!list.contains(c)) return false; if(!list.contains(c)) return false;
else list.remove(list.indexOf(c)); else list.remove(list.indexOf(c));
} }
return true; return true;
} }
@Override @Override
public String toString() { public String toString() {
return list.toString().replace('[', '(').replace(']', ')'); return list.toString().replace('[', '(').replace(']', ')');
} }
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if(o instanceof CharCollection) { if(o instanceof CharCollection) {
CharCollection c = (CharCollection) o; CharCollection c = (CharCollection) o;
if(this.size() != c.size()) return false; if(this.size() != c.size()) return false;
return this.isSubset(c); return this.isSubset(c);
}return false; }return false;
} }
} }

View File

@ -1,41 +1,41 @@
Als Buchstabensammlung wird hier eine beliebig große, unveränderliche Sammlung von großen Buchstaben bezeichnet. In einer Sammlung können einzelne Buchstaben fehlen oder mehrfach enthalten sein. Die Reihenfolge ist irrelevant. Eine Sammlung ist zum Beispiel: Als Buchstabensammlung wird hier eine beliebig große, unveränderliche Sammlung von großen Buchstaben bezeichnet. In einer Sammlung können einzelne Buchstaben fehlen oder mehrfach enthalten sein. Die Reihenfolge ist irrelevant. Eine Sammlung ist zum Beispiel:
(A, B, R, A, K, A, D, A, B, R, A) (A, B, R, A, K, A, D, A, B, R, A)
Definieren Sie auf der Grundlage einer ArrayList eine Klasse CharCollection, deren Elemente Sammlungen repräsentieren. CharCollection bietet folgende Funktionalität: Definieren Sie auf der Grundlage einer ArrayList eine Klasse CharCollection, deren Elemente Sammlungen repräsentieren. CharCollection bietet folgende Funktionalität:
CharCollection(char... cc) CharCollection(char... cc)
Erzeugt eine neue Sammlung aus einer Liste großer Buchstaben. Eine Sammlung wird zum Beispiel erzeugt mit: Erzeugt eine neue Sammlung aus einer Liste großer Buchstaben. Eine Sammlung wird zum Beispiel erzeugt mit:
CharCollection cc = new CharCollection('A', 'B', 'R', 'A', 'K', 'A', 'D', 'A', 'B', 'R', 'A'); CharCollection cc = new CharCollection('A', 'B', 'R', 'A', 'K', 'A', 'D', 'A', 'B', 'R', 'A');
CharCollection(String s) CharCollection(String s)
Erzeugt eine neue Sammlung aus den Buchstaben eines Strings aus großen Buchstaben. Die gleiche Sammlung wie im vorhergehenden Punkt wird zum Beispiel erzeugt mit: Erzeugt eine neue Sammlung aus den Buchstaben eines Strings aus großen Buchstaben. Die gleiche Sammlung wie im vorhergehenden Punkt wird zum Beispiel erzeugt mit:
CharCollection cc = new CharCollection("ABRAKADABRA"); CharCollection cc = new CharCollection("ABRAKADABRA");
int size() int size()
Liefert die Anzahl Buchstaben der Sammlung. Zum Beispiel: Liefert die Anzahl Buchstaben der Sammlung. Zum Beispiel:
System.out.println(cc.size()); // 11 System.out.println(cc.size()); // 11
int count(char c) int count(char c)
Liefert die Anzahl Vorkommen des Buchstabens c. Beispiele: Liefert die Anzahl Vorkommen des Buchstabens c. Beispiele:
System.out.println(cc.count('R')); // 2 System.out.println(cc.count('R')); // 2
System.out.println(cc.count('X')); // 0 System.out.println(cc.count('X')); // 0
int different() int different()
Liefert die Anzahl verschiedener Buchstaben in der Sammlung. Zum Beispiel: Liefert die Anzahl verschiedener Buchstaben in der Sammlung. Zum Beispiel:
System.out.println(cc.different()); // 5 System.out.println(cc.different()); // 5
char top() char top()
Liefert den häufigsten Buchstaben in der Sammlung. Wenn es mehrere Kandidaten gibt, wird irgendeiner davon gewählt. Ein Beispiel: Liefert den häufigsten Buchstaben in der Sammlung. Wenn es mehrere Kandidaten gibt, wird irgendeiner davon gewählt. Ein Beispiel:
System.out.println(cc.top()); // A System.out.println(cc.top()); // A
Eine leere Sammlung liefert das Zeichen mit dem Zeichencode 0zurück. Eine leere Sammlung liefert das Zeichen mit dem Zeichencode 0zurück.
public String toString() public String toString()
Liefert eine lesbare Darstellung der Sammlung. Liefert eine lesbare Darstellung der Sammlung.
System.out.println(cc); // (A, B, R, A, K, A, D, A, B, R, A) System.out.println(cc); // (A, B, R, A, K, A, D, A, B, R, A)
Die Reihenfolge der Elemente ist irrelevant. Die Reihenfolge der Elemente ist irrelevant.
CharCollection moreThan(int m) CharCollection moreThan(int m)
Liefert eine neue Sammlung, in der nur noch die Buchstaben enthalten sind, die mehr als m-mal vorkommen. Beispiel: Nur Buchstaben, die wenigstens 2-mal vorkommen, bleiben übrig. K und D fallen heraus: Liefert eine neue Sammlung, in der nur noch die Buchstaben enthalten sind, die mehr als m-mal vorkommen. Beispiel: Nur Buchstaben, die wenigstens 2-mal vorkommen, bleiben übrig. K und D fallen heraus:
System.out.println(cc.moreThan(1)); // (A, B, R, A, A, A, B, R, A) System.out.println(cc.moreThan(1)); // (A, B, R, A, A, A, B, R, A)
public boolean equals(Object x) public boolean equals(Object x)
Vergleicht eine Sammlung mit einem anderen Objekt x. Liefert true, wenn x eine Sammlung mit den gleichen Buchstaben ist, und ansonsten false. Die Reihenfolge spielt keine Rolle. Vergleicht eine Sammlung mit einem anderen Objekt x. Liefert true, wenn x eine Sammlung mit den gleichen Buchstaben ist, und ansonsten false. Die Reihenfolge spielt keine Rolle.
CharCollection except(CharCollection cc) CharCollection except(CharCollection cc)
Liefert eine neue Sammlung aus den Buchstaben dieser Sammlung, wobei alle Buchstaben von cc entfernt sind. Beispiel: Liefert eine neue Sammlung aus den Buchstaben dieser Sammlung, wobei alle Buchstaben von cc entfernt sind. Beispiel:
System.out.println(cc.except(new CharCollection("ABRAXAS"))); // (K, D, A, B, R, A) System.out.println(cc.except(new CharCollection("ABRAXAS"))); // (K, D, A, B, R, A)
boolean isSubset(CharCollection cc) boolean isSubset(CharCollection cc)
Liefert zurück, ob die als Parameter übergebene Sammlung in der Sammlung enthalten ist, für die die Methode aufgerufen wurde (this). Beispiel: Liefert zurück, ob die als Parameter übergebene Sammlung in der Sammlung enthalten ist, für die die Methode aufgerufen wurde (this). Beispiel:
System.out.println(cc.isSubset(new CharCollection("ABRAAA"))); // true System.out.println(cc.isSubset(new CharCollection("ABRAAA"))); // true
Ihre Lösung muss intern als Objektvariable eine List<Character> zur Speicherung der Buchstabensammlung verwenden! Ihre Lösung muss intern als Objektvariable eine List<Character> zur Speicherung der Buchstabensammlung verwenden!

View File

@ -1,8 +1,8 @@
package de.joethei.hs.java2.praktikum.praktikum3; package de.joethei.hs.java2.praktikum.praktikum3;
public class TextFileFormatException extends Exception{ public class TextFileFormatException extends Exception{
public TextFileFormatException(String s) { public TextFileFormatException(String s) {
super(s); super(s);
} }
} }

View File

@ -1,43 +1,43 @@
package de.joethei.hs.java2.praktikum.praktikum3; package de.joethei.hs.java2.praktikum.praktikum3;
import java.util.List; import java.util.List;
public class Vorlesung { public class Vorlesung {
private String studiengruppe; private String studiengruppe;
private String title; private String title;
private String dozent; private String dozent;
private int teilnehmerzahl; private int teilnehmerzahl;
public Vorlesung(List<String> list) throws TextFileFormatException { public Vorlesung(List<String> list) throws TextFileFormatException {
if(list.size() != 4) throw new TextFileFormatException("invalid number of Strings in list"); if(list.size() != 4) throw new TextFileFormatException("invalid number of Strings in list");
this.studiengruppe = list.get(0); this.studiengruppe = list.get(0);
this.title = list.get(1); this.title = list.get(1);
this.dozent = list.get(2); this.dozent = list.get(2);
try { try {
this.teilnehmerzahl = Integer.parseInt(list.get(3)); this.teilnehmerzahl = Integer.parseInt(list.get(3));
}catch (NumberFormatException ex) { }catch (NumberFormatException ex) {
throw new TextFileFormatException("Input is no number"); throw new TextFileFormatException("Input is no number");
} }
} }
String getStudiengruppe() { String getStudiengruppe() {
return studiengruppe; return studiengruppe;
} }
String getTitle() { String getTitle() {
return title; return title;
} }
String getDozent() { String getDozent() {
return dozent; return dozent;
} }
int getTeilnehmerzahl() { int getTeilnehmerzahl() {
return teilnehmerzahl; return teilnehmerzahl;
} }
@Override @Override
public String toString() { public String toString() {
return studiengruppe + ":" + title + ":" + dozent + ":" + teilnehmerzahl; return studiengruppe + ":" + title + ":" + dozent + ":" + teilnehmerzahl;
} }
} }

View File

@ -1,112 +1,112 @@
package de.joethei.hs.java2.praktikum.praktikum3; package de.joethei.hs.java2.praktikum.praktikum3;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class Vorlesungsverzeichnis implements Comparator<Vorlesung>{ public class Vorlesungsverzeichnis implements Comparator<Vorlesung>{
private Set<Vorlesung> vorlesungen = new HashSet<>(); private Set<Vorlesung> vorlesungen = new HashSet<>();
public Vorlesungsverzeichnis(String filename) throws IOException, TextFileFormatException { public Vorlesungsverzeichnis(String filename) throws IOException, TextFileFormatException {
List<List<String>> datenbasis = load(filename); List<List<String>> datenbasis = load(filename);
for (List<String> entry : datenbasis) { for (List<String> entry : datenbasis) {
if (entry.size() != 4) throw new TextFileFormatException("unexpected number of Strings in line"); if (entry.size() != 4) throw new TextFileFormatException("unexpected number of Strings in line");
for (String s : entry) if (s.isEmpty()) throw new TextFileFormatException("empty attribute"); for (String s : entry) if (s.isEmpty()) throw new TextFileFormatException("empty attribute");
vorlesungen.add(new Vorlesung(entry)); vorlesungen.add(new Vorlesung(entry));
} }
} }
/** /**
* Lädt die Datenbasis von einer Datei * Lädt die Datenbasis von einer Datei
* @param filename Dateiname * @param filename Dateiname
* @return Liste der Einträge * @return Liste der Einträge
* @throws IOException Dateifehler * @throws IOException Dateifehler
*/ */
private List<List<String>> load(String filename) throws IOException { private List<List<String>> load(String filename) throws IOException {
List<List<String>> result = new ArrayList<>(); List<List<String>> result = new ArrayList<>();
try(BufferedReader br = new BufferedReader(new FileReader(filename))) { try(BufferedReader br = new BufferedReader(new FileReader(filename))) {
for (String line = br.readLine(); line != null; line = br.readLine()) for (String line = br.readLine(); line != null; line = br.readLine())
result.add(Arrays.asList(line.split(":"))); result.add(Arrays.asList(line.split(":")));
return result; return result;
} }
} }
/** /**
* @return eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen. * @return eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen.
*/ */
public List<String> titles() { public List<String> titles() {
SortedSet<String> set = new TreeSet<>(); SortedSet<String> set = new TreeSet<>();
vorlesungen.forEach(vorlesung -> set.add(vorlesung.getTitle())); vorlesungen.forEach(vorlesung -> set.add(vorlesung.getTitle()));
return new ArrayList<>(set); return new ArrayList<>(set);
} }
/** /**
* @return die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten. * @return die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten.
*/ */
public Set<String> workaholics() { public Set<String> workaholics() {
Map<String, Set<String>> map = vorlesungen.stream().collect( Map<String, Set<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getDozent, Collectors.groupingBy(Vorlesung::getDozent,
Collectors.mapping(Vorlesung::getTitle, Collectors.toSet()))); Collectors.mapping(Vorlesung::getTitle, Collectors.toSet())));
Set<String> set = new HashSet<>(); Set<String> set = new HashSet<>();
map.forEach((s, strings) -> { map.forEach((s, strings) -> {
if(strings.size() >= 2) set.add(s); if(strings.size() >= 2) set.add(s);
}); });
return set; return set;
} }
/** /**
* @return eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet. * @return eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet.
*/ */
public Map<String, List<String>> groupToTitles() { public Map<String, List<String>> groupToTitles() {
Map<String, List<String>> map = vorlesungen.stream().collect( Map<String, List<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getStudiengruppe, Collectors.groupingBy(Vorlesung::getStudiengruppe,
Collectors.mapping(Vorlesung::getTitle, Collectors.toList()))); Collectors.mapping(Vorlesung::getTitle, Collectors.toList())));
map.forEach((s, strings) -> Collections.sort(strings)); map.forEach((s, strings) -> Collections.sort(strings));
return map; return map;
} }
/** /**
* @return eine Map, die Vorlesungen auf Listen von Dozenten, die diese Vorlesungen halten, abbildet. * @return eine Map, die Vorlesungen auf Listen von Dozenten, die diese Vorlesungen halten, abbildet.
* Als Schlüssel werden in der Map nur Vorlesungen verwendet, die von unterschiedlichen Dozenten gehalten werden. * Als Schlüssel werden in der Map nur Vorlesungen verwendet, die von unterschiedlichen Dozenten gehalten werden.
*/ */
public Map<String, List<String>> multipleTitles() { public Map<String, List<String>> multipleTitles() {
Map<String, List<String>> map = vorlesungen.stream().collect( Map<String, List<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getTitle, Collectors.groupingBy(Vorlesung::getTitle,
Collectors.mapping(Vorlesung::getDozent, Collectors.toList()))); Collectors.mapping(Vorlesung::getDozent, Collectors.toList())));
Iterator<Map.Entry<String, List<String>>> iterator = map.entrySet().iterator(); Iterator<Map.Entry<String, List<String>>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
Map.Entry<String, List<String>> entry = iterator.next(); Map.Entry<String, List<String>> entry = iterator.next();
if(entry.getValue().size() < 2) iterator.remove(); if(entry.getValue().size() < 2) iterator.remove();
Collections.sort(entry.getValue()); Collections.sort(entry.getValue());
} }
return map; return map;
} }
/** /**
* @return Liste mit Vorlesungstitel absteigend sortiert nach Teilnehmerzahl * @return Liste mit Vorlesungstitel absteigend sortiert nach Teilnehmerzahl
*/ */
public List<String> descendingTitles() { public List<String> descendingTitles() {
SortedSet<Vorlesung> set = new TreeSet<>(this.reversed()); SortedSet<Vorlesung> set = new TreeSet<>(this.reversed());
set.addAll(vorlesungen); set.addAll(vorlesungen);
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
set.forEach(vorlesung -> list.add(vorlesung.getTitle())); set.forEach(vorlesung -> list.add(vorlesung.getTitle()));
return list; return list;
} }
/** /**
* für die aufsteigende Sortierung * für die aufsteigende Sortierung
*/ */
@Override @Override
public int compare(Vorlesung o1, Vorlesung o2) { public int compare(Vorlesung o1, Vorlesung o2) {
return Integer.compare(o1.getTeilnehmerzahl(), o2.getTeilnehmerzahl()); return Integer.compare(o1.getTeilnehmerzahl(), o2.getTeilnehmerzahl());
} }
} }

View File

@ -1,43 +1,43 @@
In einer Textdatei sind Vorlesungsdaten gespeichert. Jede Zeile besteht aus vier Teilstrings, die mit Doppelpunkten getrennt sind. Der Doppelpunkt kommt sonst nicht vor. Die vier Strings in einer Zeile enthalten der Reihe nach: In einer Textdatei sind Vorlesungsdaten gespeichert. Jede Zeile besteht aus vier Teilstrings, die mit Doppelpunkten getrennt sind. Der Doppelpunkt kommt sonst nicht vor. Die vier Strings in einer Zeile enthalten der Reihe nach:
Studiengruppe Studiengruppe
Titel der Vorlesung Titel der Vorlesung
Dozent Dozent
Teilnehmerzahl Teilnehmerzahl
Ein Ausschnitt aus der Datei könnte so aussehen: Ein Ausschnitt aus der Datei könnte so aussehen:
I2:Java 2:Rump:100 I2:Java 2:Rump:100
I2:Algorithmen und Datenstrukturen:Totzauer:80 I2:Algorithmen und Datenstrukturen:Totzauer:80
MT2:Mathematik 2:von Coelln:60 MT2:Mathematik 2:von Coelln:60
MT2:Audio-/Videotechnik:Lemke:50 MT2:Audio-/Videotechnik:Lemke:50
E2:Mathematik 2:Rabe:70 E2:Mathematik 2:Rabe:70
Die folgende Methode load liest eine solche Datei und liefert sie als Liste von Stringlisten ("Datenbasis") zurück. Die folgende Methode load liest eine solche Datei und liefert sie als Liste von Stringlisten ("Datenbasis") zurück.
public static List<List<String>> load(String filename) throws IOException { public static List<List<String>> load(String filename) throws IOException {
List<List<String>> result = new ArrayList<List<String>>(); List<List<String>> result = new ArrayList<List<String>>();
BufferedReader br = new BufferedReader(new FileReader(filename)); BufferedReader br = new BufferedReader(new FileReader(filename));
for (String line=br.readLine(); line!=null; line=br.readLine()) for (String line=br.readLine(); line!=null; line=br.readLine())
result.add(Arrays.asList(line.split(":"))); result.add(Arrays.asList(line.split(":")));
br.close(); br.close();
return result; return result;
} }
Kapseln Sie eine derartige Datenbasis in einer Klasse Vorlesungsverzeichnis im Paket vorlesung mit den folgenden Methoden: Kapseln Sie eine derartige Datenbasis in einer Klasse Vorlesungsverzeichnis im Paket vorlesung mit den folgenden Methoden:
Konstruktor Konstruktor
Lädt die Datenbasis von einer Datei, deren Name als String übergeben wird. Für alle möglichen Formatfehler in der Datei soll eine TextFileFormatException mit einer aussagekräftigen Fehlermeldung geworfen werden. Lädt die Datenbasis von einer Datei, deren Name als String übergeben wird. Für alle möglichen Formatfehler in der Datei soll eine TextFileFormatException mit einer aussagekräftigen Fehlermeldung geworfen werden.
public List<String> titles() public List<String> titles()
Liefert eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen. Liefert eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen.
public Set<String> workaholics() public Set<String> workaholics()
Liefert die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten. Liefert die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten.
public Map<String, List<String>> groupToTitles() public Map<String, List<String>> groupToTitles()
Liefert eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet. Unter dem Schlüssel MT2 wäre für die oben angegebene Datenbasis zum Beispiel als Wert die Liste [Mathematik 2, Audio-/Videotechnik] zu finden. Liefert eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet. Unter dem Schlüssel MT2 wäre für die oben angegebene Datenbasis zum Beispiel als Wert die Liste [Mathematik 2, Audio-/Videotechnik] zu finden.
public Map<String, List<String>> multipleTitles() public Map<String, List<String>> multipleTitles()
Liefert eine Map, die Vorlesungen auf Listen von Dozenten, die diese Vorlesungen halten, abbildet. Als Schlüssel werden in der Map nur Vorlesungen verwendet, die von unterschiedlichen Dozenten gehalten werden. Entsprechend der obigen Datenbasis würde in diesem Fall nur ein Eintrag in der Map stehen mit dem Schlüssel Mathematik 2 und dem Wert [von Coelln, Rabe] als Liste. Liefert eine Map, die Vorlesungen auf Listen von Dozenten, die diese Vorlesungen halten, abbildet. Als Schlüssel werden in der Map nur Vorlesungen verwendet, die von unterschiedlichen Dozenten gehalten werden. Entsprechend der obigen Datenbasis würde in diesem Fall nur ein Eintrag in der Map stehen mit dem Schlüssel Mathematik 2 und dem Wert [von Coelln, Rabe] als Liste.
public List<String> descendingTitles() public List<String> descendingTitles()
Liefert eine nach Teilnehmerzahl absteigend(!) sortierte Liste mit den Titeln aller Vorlesungen. Liefert eine nach Teilnehmerzahl absteigend(!) sortierte Liste mit den Titeln aller Vorlesungen.
Die Klasse Vorlesungsverzeichnis muss die Daten zu den Vorlesungen intern als Objektvariable in einer Set<Vorlesung> speichern und verarbeiten! Die Klasse Vorlesungsverzeichnis muss die Daten zu den Vorlesungen intern als Objektvariable in einer Set<Vorlesung> speichern und verarbeiten!

View File

@ -1,41 +1,41 @@
package de.joethei.hs.java2.praktikum.praktikum4; package de.joethei.hs.java2.praktikum.praktikum4;
import java.io.*; import java.io.*;
import java.net.Socket; import java.net.Socket;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
public class ClientRunnable implements Runnable{ public class ClientRunnable implements Runnable{
private Socket socket; private Socket socket;
private BufferedReader bufferedReader; private BufferedReader bufferedReader;
public ClientRunnable(Socket socket) { public ClientRunnable(Socket socket) {
this.socket = socket; this.socket = socket;
try { try {
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@Override @Override
public void run() { public void run() {
try { try {
String input = bufferedReader.readLine(); String input = bufferedReader.readLine();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
input = input.replace(",", " "); input = input.replace(",", " ");
List<String> arguments = Arrays.asList(input.split(" ")); List<String> arguments = Arrays.asList(input.split(" "));
KlausurenServer.getCommands().get(arguments.get(0).toLowerCase()).handle(bufferedWriter, arguments); KlausurenServer.getCommands().get(arguments.get(0).toLowerCase()).handle(bufferedWriter, arguments);
bufferedWriter.flush(); bufferedWriter.flush();
bufferedWriter.close(); bufferedWriter.close();
socket.close(); socket.close();
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }

View File

@ -1,11 +1,11 @@
package de.joethei.hs.java2.praktikum.praktikum4; package de.joethei.hs.java2.praktikum.praktikum4;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
public interface CommandHandler { public interface CommandHandler {
void handle(BufferedWriter writer, List<String> args) throws IOException; void handle(BufferedWriter writer, List<String> args) throws IOException;
} }

View File

@ -1,168 +1,167 @@
package de.joethei.hs.java2.praktikum.praktikum4; package de.joethei.hs.java2.praktikum.praktikum4;
import java.io.*; import java.io.*;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
public class KlausurenServer { public class KlausurenServer {
private ConcurrentMap<String, TreeSet<Integer>> data = new ConcurrentHashMap<>(); private ConcurrentMap<String, TreeSet<Integer>> data = new ConcurrentHashMap<>();
private ExecutorService executorService = Executors.newCachedThreadPool(); private ExecutorService executorService = Executors.newCachedThreadPool();
private ServerSocket serverSocket; private ServerSocket serverSocket;
private static Map<String, CommandHandler> commands = new HashMap<>(); private static Map<String, CommandHandler> commands = new HashMap<>();
Hallo Welt
static Map<String, CommandHandler> getCommands() {
static Map<String, CommandHandler> getCommands() { return commands;
return commands; }
}
private boolean running;
private boolean running;
public KlausurenServer(int port) {
public KlausurenServer(int port) { load();
load();
commands.put("test", ((writer, args) -> writer.write("Hallo Welt")));
commands.put("test", ((writer, args) -> writer.write("Hallo Welt"))); commands.put("delall", (writer, args) -> {
commands.put("delall", (writer, args) -> { data.clear();
data.clear(); save();
save(); });
}); commands.put("put", (writer, args) -> {
commands.put("put", (writer, args) -> { if (args.size() >= 3) {
if (args.size() >= 3) { TreeSet<Integer> set = new TreeSet<>();
TreeSet<Integer> set = new TreeSet<>(); for (int i = 2; i <= args.size() - 1; i++) {
for (int i = 2; i <= args.size() - 1; i++) { try {
try { set.add(Integer.parseInt(args.get(i)));
set.add(Integer.parseInt(args.get(i))); } catch (NumberFormatException ex) {
} catch (NumberFormatException ex) { }
} }
} writer.write("1 ");
writer.write("1 "); if (data.containsKey(args.get(1).toLowerCase())) {
if (data.containsKey(args.get(1).toLowerCase())) { writer.write(data.get(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replaceAll(" ", ""));
writer.write(data.get(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replaceAll(" ", "")); }
} data.put(args.get(1).toLowerCase(), set);
data.put(args.get(1).toLowerCase(), set); save();
save(); } else {
} else { writer.write("0");
writer.write("0"); }
} });
}); commands.put("getall", (writer, args) -> {
commands.put("getall", (writer, args) -> { if (!data.isEmpty()) {
if (!data.isEmpty()) { writer.write("1 ");
writer.write("1 "); ConcurrentMap<String, TreeSet<Integer>> set = new ConcurrentHashMap<>(data);
ConcurrentMap<String, TreeSet<Integer>> set = new ConcurrentHashMap<>(data); Set<TreeSet<Integer>> result = new HashSet<>();
Set<TreeSet<Integer>> result = new HashSet<>();
set.forEach((key, value) -> set.forEach((s, integers) -> {
set.forEach((key, value) -> set.forEach((s, integers) -> { if(!value.equals(integers)) {
if(!value.equals(integers)) { if (integers.containsAll(value))
if (integers.containsAll(value)) set.remove(key);
set.remove(key); }
} }));
}));
set.forEach((key, value) -> result.add(value));
set.forEach((key, value) -> result.add(value));
result.removeIf(TreeSet::isEmpty);
result.removeIf(TreeSet::isEmpty);
writer.write(result.toString().substring(1, result.toString().length()-1).replace(" ", ""));
writer.write(result.toString().substring(1, result.toString().length()-1).replace(" ", "")); } else {
} else { writer.write("0");
writer.write("0"); }
} });
}); commands.put("get", (writer, args) -> {
commands.put("get", (writer, args) -> { if (args.size() == 2) {
if (args.size() == 2) { if (data.containsKey(args.get(1).toLowerCase())) {
if (data.containsKey(args.get(1).toLowerCase())) { writer.write("1 " + data.get(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replace(" ", ""));
writer.write("1 " + data.get(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replace(" ", "")); } else writer.write("0");
} else writer.write("0"); } else writer.write("0");
} else writer.write("0"); });
}); commands.put("del", (writer, args) -> {
commands.put("del", (writer, args) -> { if (args.size() == 2) {
if (args.size() == 2) { if (data.containsKey(args.get(1).toLowerCase())) {
if (data.containsKey(args.get(1).toLowerCase())) { writer.write("1 " + data.remove(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replace(" ", ""));
writer.write("1 " + data.remove(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replace(" ", "")); save();
save(); } else writer.write("0");
} else writer.write("0"); } else writer.write("0");
} else writer.write("0"); });
}); commands.put("stop", ((writer, args) -> {
commands.put("stop", ((writer, args) -> { writer.write("1");
writer.write("1"); save();
save(); running = false;
running = false; }));
})); running = true;
running = true; Runnable runnable = () -> {
Runnable runnable = () -> { try {
try { serverSocket = new ServerSocket(port);
serverSocket = new ServerSocket(port); System.out.println("waiting for clients");
System.out.println("waiting for clients"); while (running) {
while (running) { executorService.submit(new ClientRunnable(serverSocket.accept()));
executorService.submit(new ClientRunnable(serverSocket.accept())); }
} executorService.shutdown();
executorService.shutdown(); try {
try { executorService.awaitTermination(1, TimeUnit.MINUTES);
executorService.awaitTermination(1, TimeUnit.MINUTES); } catch (InterruptedException e) {
} catch (InterruptedException e) { Thread.currentThread().interrupt();
Thread.currentThread().interrupt(); }
}
serverSocket.close();
serverSocket.close(); System.out.println("server shutdown");
System.out.println("server shutdown"); Thread.currentThread().interrupt();
Thread.currentThread().interrupt(); } catch (IOException e) {
} catch (IOException e) { e.printStackTrace();
e.printStackTrace(); }
}
};
}; Thread thread = new Thread(runnable);
Thread thread = new Thread(runnable); thread.start();
thread.start(); }
}
synchronized void load() {
synchronized void load() { FileReader fileReader = null;
FileReader fileReader = null; try {
try { fileReader = new FileReader(getClass().getClassLoader().getResource("praktikum4/data.txt").getFile());
fileReader = new FileReader(getClass().getClassLoader().getResource("praktikum4/data.txt").getFile()); } catch (FileNotFoundException e) {
} catch (FileNotFoundException e) { e.printStackTrace();
e.printStackTrace(); }
} try (BufferedReader br = new BufferedReader(Objects.requireNonNull(fileReader))) {
try (BufferedReader br = new BufferedReader(Objects.requireNonNull(fileReader))) { for (String line = br.readLine(); line != null; line = br.readLine()) {
for (String line = br.readLine(); line != null; line = br.readLine()) { TreeSet<Integer> set = new TreeSet<>();
TreeSet<Integer> set = new TreeSet<>(); String[] array = line.split(":");
String[] array = line.split(":"); for (int i = 1; i <= array.length - 1; i++) {
for (int i = 1; i <= array.length - 1; i++) { set.add(Integer.parseInt(array[i]));
set.add(Integer.parseInt(array[i])); }
} data.put(array[0], set);
data.put(array[0], set); }
} } catch (IOException e) {
} catch (IOException e) { e.printStackTrace();
e.printStackTrace(); }
} }
}
synchronized void save() {
synchronized void save() { FileOutputStream fileWriter;
FileOutputStream fileWriter; PrintWriter printWriter = null;
PrintWriter printWriter = null; try {
try { fileWriter = new FileOutputStream(getClass().getClassLoader().getResource("praktikum4/data.txt").getFile());
fileWriter = new FileOutputStream(getClass().getClassLoader().getResource("praktikum4/data.txt").getFile()); printWriter = new PrintWriter(fileWriter);
printWriter = new PrintWriter(fileWriter);
for (Map.Entry<String, TreeSet<Integer>> entry : data.entrySet()) {
for (Map.Entry<String, TreeSet<Integer>> entry : data.entrySet()) { StringBuilder tmp = new StringBuilder(entry.getKey());
StringBuilder tmp = new StringBuilder(entry.getKey()); for (int integer : entry.getValue()) {
for (int integer : entry.getValue()) { tmp.append(":").append(integer);
tmp.append(":").append(integer); }
} printWriter.println(tmp.toString());
printWriter.println(tmp.toString());
}
} } catch (IOException e) {
} catch (IOException e) { e.printStackTrace();
e.printStackTrace(); } finally {
} finally { assert printWriter != null;
assert printWriter != null; printWriter.close();
printWriter.close();
}
} }
}
public static void main(String[] args) {
public static void main(String[] args) { new KlausurenServer(Integer.parseInt(args[0]));
new KlausurenServer(Integer.parseInt(args[0])); }
}
} }

View File

@ -1,75 +1,75 @@
Entwickeln Sie eine Klasse KlausurenServer, mit der verwaltetet werden kann, Entwickeln Sie eine Klasse KlausurenServer, mit der verwaltetet werden kann,
welche Klausuren ein(e) Student/-in mitschreiben möchte. welche Klausuren ein(e) Student/-in mitschreiben möchte.
Zu einer Mail-Adresse werden dabei die IDs der Klausuren gespeichert, z.B. Zu einer Mail-Adresse werden dabei die IDs der Klausuren gespeichert, z.B.
max.mueller@stud.hs-emden-leer.de: 34, 45, 56 max.mueller@stud.hs-emden-leer.de: 34, 45, 56
peter.meier@stud.hs-emden-leer.de: 1, 8, 34, 67 peter.meier@stud.hs-emden-leer.de: 1, 8, 34, 67
axel.maier@stud.hs-emden-leer.de: 34, 56 axel.maier@stud.hs-emden-leer.de: 34, 56
... ...
Intern werden diese Daten als (key,value)-Paare in einer Map gespeichert, wobei als key die Mail-Adresse verwendet wird. Intern werden diese Daten als (key,value)-Paare in einer Map gespeichert, wobei als key die Mail-Adresse verwendet wird.
Der Konstruktor der Klasse KlausurenServer erhält als Parameter den Port, auf dem Anfragen entgegengenommen werden. Der Konstruktor der Klasse KlausurenServer erhält als Parameter den Port, auf dem Anfragen entgegengenommen werden.
Jede Anfrage besteht aus einer Textzeile, die eines der nachfolgend beschriebenen Kommandos enthalten darf, Jede Anfrage besteht aus einer Textzeile, die eines der nachfolgend beschriebenen Kommandos enthalten darf,
wobei die Kommandos groß oder klein geschrieben werden können. wobei die Kommandos groß oder klein geschrieben werden können.
Als Antwort wird eine Textzeile zurückgeschickt, die immer mit 0 (Misserfolg) oder 1 (Erfolg) beginnt. Als Antwort wird eine Textzeile zurückgeschickt, die immer mit 0 (Misserfolg) oder 1 (Erfolg) beginnt.
Die (key,value)-Paare sollen auch nach einem Stoppen und Starten des Servers erhalten bleiben Die (key,value)-Paare sollen auch nach einem Stoppen und Starten des Servers erhalten bleiben
und müssen somit in einer Datei gespeichert werden. und müssen somit in einer Datei gespeichert werden.
PUT key newvalue -> 1 oldvalue PUT key newvalue -> 1 oldvalue
Trägt unter dem Schlüssel key den Wert newvalue ein. Die Antwort besteht aus einer 1 und dem alten Wert des Schlüssels. Trägt unter dem Schlüssel key den Wert newvalue ein. Die Antwort besteht aus einer 1 und dem alten Wert des Schlüssels.
Beim ersten Eintrag ist oldvalue ein leerer String. Falls newvalue Leerzeichen enthält, sollen diese entfernt werden. Beim ersten Eintrag ist oldvalue ein leerer String. Falls newvalue Leerzeichen enthält, sollen diese entfernt werden.
GET key -> 1 value oder 0 GET key -> 1 value oder 0
Liefert den Wert, der unter dem Schlüssel key eingetragen ist. Liefert den Wert, der unter dem Schlüssel key eingetragen ist.
Die IDs der Klausuren werden dabei immer aufsteigend sortiert zurückgegeben. Die IDs der Klausuren werden dabei immer aufsteigend sortiert zurückgegeben.
Wenn der Schlüssel nicht bekannt ist, ist die Antwort 0. Wenn der Schlüssel nicht bekannt ist, ist die Antwort 0.
DEL key -> 1 oldvalue oder 0 DEL key -> 1 oldvalue oder 0
Löscht Schlüssel und Wert und liefert den gelöschten Wert zurück. Löscht Schlüssel und Wert und liefert den gelöschten Wert zurück.
Wenn der Schlüssel nicht bekannt war, wird 0 zurückgeliefert. Wenn der Schlüssel nicht bekannt war, wird 0 zurückgeliefert.
GETALL -> 1 value oder 0 GETALL -> 1 value oder 0
Liefert eine Auflistung aller Klausurenwahlen. Liefert eine Auflistung aller Klausurenwahlen.
Wenn die Wahl eines/einer Studierenden in der Wahl eines/einer anderen Studierenden enthalten ist, Wenn die Wahl eines/einer Studierenden in der Wahl eines/einer anderen Studierenden enthalten ist,
fällt diese für diese Anfrage weg. fällt diese für diese Anfrage weg.
Beim obigen Beispiel würde die Wahl von Axel Maier entfallen, Beim obigen Beispiel würde die Wahl von Axel Maier entfallen,
da diese Klausuren auch von Max Mueller gewählt wurden. value soll in folgender Form zurückgegeben werden: da diese Klausuren auch von Max Mueller gewählt wurden. value soll in folgender Form zurückgegeben werden:
[34,45,56],[1,8,34,67] [34,45,56],[1,8,34,67]
Falls (noch) keine Klausurenwahlen vorhanden sind, wird 0 zurückgegeben. Falls (noch) keine Klausurenwahlen vorhanden sind, wird 0 zurückgegeben.
STOP -> 1 STOP -> 1
Beendet den Dienst und somit den Server. Beendet den Dienst und somit den Server.
Eine main-Methode liest von der Kommandozeile einen Port ein, legt ein KlausurenServer-Objekt an und startet den Server. Eine main-Methode liest von der Kommandozeile einen Port ein, legt ein KlausurenServer-Objekt an und startet den Server.
Der KlausurenServer arbeitet ähnlich wie ein Webserver. Der KlausurenServer arbeitet ähnlich wie ein Webserver.
Er verarbeitet jede Anfrage einzeln in einem eigenen Thread(!) und unabhängig von anderen Anfragen. Er verarbeitet jede Anfrage einzeln in einem eigenen Thread(!) und unabhängig von anderen Anfragen.
Die Verbindung zum Client wird nach jeder Antwort wieder geschlossen. Die Verbindung zum Client wird nach jeder Antwort wieder geschlossen.
Ein Client, der mehrere Anfragen abwickeln möchte, muss für jede Anfrage eine neue Verbindung zum Server aufnehmen. Ein Client, der mehrere Anfragen abwickeln möchte, muss für jede Anfrage eine neue Verbindung zum Server aufnehmen.
Ein solches Protokoll wird als "zustandslos" bezeichnet, weil mit jeder Anfrage eine neue Kommunikationssequenz beginnt, Ein solches Protokoll wird als "zustandslos" bezeichnet, weil mit jeder Anfrage eine neue Kommunikationssequenz beginnt,
die keine Informationen aus früheren Anfragen voraussetzt. die keine Informationen aus früheren Anfragen voraussetzt.
Praktisch alle Betriebssysteme enthalten einen Telnet-Client, mit dem der Klausurenserver getestet werden kann. Praktisch alle Betriebssysteme enthalten einen Telnet-Client, mit dem der Klausurenserver getestet werden kann.
Dieser muss bei Windows-Systemen aber ggfls. nachinstalliert werden. Dieser muss bei Windows-Systemen aber ggfls. nachinstalliert werden.
Das folgende Beispiel zeigt den Dialog auf einem Unix-System. Das folgende Beispiel zeigt den Dialog auf einem Unix-System.
Der KlausurenServer wurde in einem anderen Terminal gestartet und läuft bereits. Der KlausurenServer wurde in einem anderen Terminal gestartet und läuft bereits.
Zur Vereinfachung sind die Protokollausgaben des Telnet-Clients ausgeblendet: Zur Vereinfachung sind die Protokollausgaben des Telnet-Clients ausgeblendet:
$ telnet localhost 2000 $ telnet localhost 2000
put max.mueller@stud.hs-emden-leer.de 34,45,56 put max.mueller@stud.hs-emden-leer.de 34,45,56
1 1
$ telnet localhost 2000 $ telnet localhost 2000
put axel.maier@stud.hs-emden-leer.de 34, 56 put axel.maier@stud.hs-emden-leer.de 34, 56
1 1
$ telnet localhost 2000 $ telnet localhost 2000
getall getall
1 [34,45,56] 1 [34,45,56]
$ telnet localhost 2000 $ telnet localhost 2000
put max.mueller@stud.hs-emden-leer.de 34, 45 put max.mueller@stud.hs-emden-leer.de 34, 45
1 34,45,56 1 34,45,56
$ telnet localhost 2000 $ telnet localhost 2000
get max.mueller@stud.hs-emden-leer.de get max.mueller@stud.hs-emden-leer.de
1 34,45 1 34,45
$ telnet localhost 2000 $ telnet localhost 2000
del max.mueller@stud.hs-emden-leer.de del max.mueller@stud.hs-emden-leer.de
1 34,45 1 34,45
$ telnet localhost 2000 $ telnet localhost 2000
get max.mueller@stud.hs-emden-leer.de get max.mueller@stud.hs-emden-leer.de
0 0
$ telnet localhost 2000 $ telnet localhost 2000
stop stop
1 1

View File

@ -1,7 +1,7 @@
I2:Java 2:Rump:100 I2:Java 2:Rump:100
I2:Algorithmen und Datenstrukturen:Totzauer:30 I2:Algorithmen und Datenstrukturen:Totzauer:30
MT2::von Coelln:60 MT2::von Coelln:60
MT2:Audio-/Videotechnik:Lemke:50 MT2:Audio-/Videotechnik:Lemke:50
E2:Mathematik 2:Rabe:20 E2:Mathematik 2:Rabe:20
I4:Rechnerarchitekturen:von Coelln:45 I4:Rechnerarchitekturen:von Coelln:45
I4:Internet-Technologien:Rump:40 I4:Internet-Technologien:Rump:40

View File

@ -1,7 +1,7 @@
I2:Java 2:Rump:100 I2:Java 2:Rump:100
I2:Algorithmen und Datenstrukturen:Totzauer:80 I2:Algorithmen und Datenstrukturen:Totzauer:80
MT2:Mathematik 2:von Coelln:60 MT2:Mathematik 2:von Coelln:60
MT2:Audio-/Videotechnik:Lemke:5F MT2:Audio-/Videotechnik:Lemke:5F
E2:Mathematik 2:Rabe:70 E2:Mathematik 2:Rabe:70
I4:Rechnerarchitekturen:von Coelln:45 I4:Rechnerarchitekturen:von Coelln:45
I4:Internet-Technologien:Rump:40 I4:Internet-Technologien:Rump:40

View File

@ -1,7 +1,7 @@
I2:Java 2:Rump:100 I2:Java 2:Rump:100
I2:Algorithmen und Datenstrukturen:Totzauer:80 I2:Algorithmen und Datenstrukturen:Totzauer:80
MT2:Mathematik 2:von Coelln:60 MT2:Mathematik 2:von Coelln:60
MT2:Audio-/Videotechnik:Lemke:50 MT2:Audio-/Videotechnik:Lemke:50
E2:Mathematik 2:Rabe:70 E2:Mathematik 2:Rabe:70
I4:Rechnerarchitekturen:von Coelln:45 I4:Rechnerarchitekturen:von Coelln:45
I4:Internet-Technologien:Rump:40 I4:Internet-Technologien:Rump:40

View File

@ -1,65 +1,65 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import de.joethei.hs.java2.praktikum.praktikum2.CharCollection; import de.joethei.hs.java2.praktikum.praktikum2.CharCollection;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.*; import static org.junit.Assert.*;
public class CharCollectionTest { public class CharCollectionTest {
@Test @Test
public void constructors() { public void constructors() {
assertEquals(new CharCollection("Hallo"), new CharCollection('H', 'a', 'l', 'l', 'o')); assertEquals(new CharCollection("Hallo"), new CharCollection('H', 'a', 'l', 'l', 'o'));
} }
@Test @Test
public void size() { public void size() {
assertEquals(5, new CharCollection("Hallo").size()); assertEquals(5, new CharCollection("Hallo").size());
} }
@Test @Test
public void count() { public void count() {
assertEquals(2, new CharCollection("Hallo").count('l')); assertEquals(2, new CharCollection("Hallo").count('l'));
assertEquals(1, new CharCollection("Hallo").count('a')); assertEquals(1, new CharCollection("Hallo").count('a'));
} }
@Test @Test
public void different() { public void different() {
assertEquals(4, new CharCollection("Hallo").different()); assertEquals(4, new CharCollection("Hallo").different());
} }
@Test @Test
public void top() { public void top() {
assertEquals('l', new CharCollection("Hallo").top()); assertEquals('l', new CharCollection("Hallo").top());
} }
@Test @Test
public void toStringTest() { public void toStringTest() {
assertEquals("(H, a, l, l, o, W, e, l, t)", new CharCollection("HalloWelt").toString()); assertEquals("(H, a, l, l, o, W, e, l, t)", new CharCollection("HalloWelt").toString());
} }
@Test @Test
public void moreThan() { public void moreThan() {
assertEquals(new CharCollection("lll"), new CharCollection("Hallol").moreThan(2)); assertEquals(new CharCollection("lll"), new CharCollection("Hallol").moreThan(2));
} }
@Test @Test
public void equals() { public void equals() {
assertEquals(new CharCollection("llo"), new CharCollection("lol")); assertEquals(new CharCollection("llo"), new CharCollection("lol"));
assertNotEquals(new CharCollection("Hallo"), "Hallo"); assertNotEquals(new CharCollection("Hallo"), "Hallo");
} }
@Test @Test
public void except() { public void except() {
assertEquals(new CharCollection("Halo"), new CharCollection("Hallo").except(new CharCollection("l"))); assertEquals(new CharCollection("Halo"), new CharCollection("Hallo").except(new CharCollection("l")));
} }
@Test @Test
public void isSubsect() { public void isSubsect() {
assertTrue(new CharCollection("Hallo").isSubset(new CharCollection("Hao"))); assertTrue(new CharCollection("Hallo").isSubset(new CharCollection("Hao")));
} }
} }

View File

@ -1,113 +1,113 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import de.joethei.hs.java2.praktikum.praktikum2.CharCollection; import de.joethei.hs.java2.praktikum.praktikum2.CharCollection;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.util.Arrays; import java.util.Arrays;
import static org.junit.Assert.*; import static org.junit.Assert.*;
public class CharCollectionTest2 { public class CharCollectionTest2 {
private CharCollection a, b, c, d; private CharCollection a, b, c, d;
@Before @Before
public void setUp() public void setUp()
{ {
a = new CharCollection('A', 'N', 'A', 'N', 'A', 'S'); a = new CharCollection('A', 'N', 'A', 'N', 'A', 'S');
b = new CharCollection('H', 'O', 'C', 'H', 'S', 'C', 'H', 'U', 'L', 'E'); b = new CharCollection('H', 'O', 'C', 'H', 'S', 'C', 'H', 'U', 'L', 'E');
c = new CharCollection("AAANNS"); c = new CharCollection("AAANNS");
d = new CharCollection(); d = new CharCollection();
} }
@Test @Test
public void Laenge(){ public void Laenge(){
assertEquals(6,a.size()); assertEquals(6,a.size());
assertEquals(10,b.size()); assertEquals(10,b.size());
assertEquals(6,c.size()); assertEquals(6,c.size());
assertEquals(0,d.size()); assertEquals(0,d.size());
} }
@Test @Test
public void Anzahl(){ public void Anzahl(){
assertEquals(2,a.count('N')); assertEquals(2,a.count('N'));
assertEquals(0,a.count('X')); assertEquals(0,a.count('X'));
assertEquals(3,b.count('H')); assertEquals(3,b.count('H'));
assertEquals(1,c.count('S')); assertEquals(1,c.count('S'));
assertEquals(0,d.count('H')); assertEquals(0,d.count('H'));
} }
@Test @Test
public void Verschieden(){ public void Verschieden(){
assertEquals(3,a.different()); assertEquals(3,a.different());
assertEquals(7,b.different()); assertEquals(7,b.different());
assertEquals(3,c.different()); assertEquals(3,c.different());
assertEquals(0,d.different()); assertEquals(0,d.different());
} }
@Test @Test
public void Haeufigster(){ public void Haeufigster(){
assertEquals('A',a.top()); assertEquals('A',a.top());
assertEquals('H',b.top()); assertEquals('H',b.top());
assertEquals('A',c.top()); assertEquals('A',c.top());
assertEquals(0,d.top()); assertEquals(0,d.top());
} }
@Test @Test
public void Vergleich(){ public void Vergleich(){
assertEquals(a, c); assertEquals(a, c);
assertEquals(b, new CharCollection("CCEHHHLOSU")); assertEquals(b, new CharCollection("CCEHHHLOSU"));
assertNotEquals(b, new CharCollection("CEHLOSU")); assertNotEquals(b, new CharCollection("CEHLOSU"));
assertEquals(d, new CharCollection("")); assertEquals(d, new CharCollection(""));
} }
@Test @Test
public void Ausgabe(){ public void Ausgabe(){
assertEquals(a.toString().length(),c.toString().length()); assertEquals(a.toString().length(),c.toString().length());
assertEquals(b.toString().length(),new CharCollection("CCEHHHLOSU").toString().length()); assertEquals(b.toString().length(),new CharCollection("CCEHHHLOSU").toString().length());
assertEquals("()",d.toString()); assertEquals("()",d.toString());
char[] aa = a.toString().toCharArray(); char[] aa = a.toString().toCharArray();
char[] ca = c.toString().toCharArray(); char[] ca = c.toString().toCharArray();
Arrays.sort(aa); Arrays.sort(aa);
Arrays.sort(ca); Arrays.sort(ca);
assertTrue(Arrays.equals(aa, ca)); assertTrue(Arrays.equals(aa, ca));
char[] ba = b.toString().toCharArray(); char[] ba = b.toString().toCharArray();
char[] b2a = "(C, C, H, H, H, L, O, E, S, U)".toCharArray(); char[] b2a = "(C, C, H, H, H, L, O, E, S, U)".toCharArray();
Arrays.sort(ba); Arrays.sort(ba);
Arrays.sort(b2a); Arrays.sort(b2a);
assertTrue(Arrays.equals(ba, b2a)); assertTrue(Arrays.equals(ba, b2a));
} }
@Test @Test
public void Mindestens(){ public void Mindestens(){
assertEquals(a.moreThan(1), new CharCollection("AAANN")); assertEquals(a.moreThan(1), new CharCollection("AAANN"));
assertEquals(a.moreThan(2), new CharCollection("AAA")); assertEquals(a.moreThan(2), new CharCollection("AAA"));
assertEquals("(A, A, A)",a.moreThan(2).toString()); assertEquals("(A, A, A)",a.moreThan(2).toString());
assertEquals(b.moreThan(1), new CharCollection("CCHHH")); assertEquals(b.moreThan(1), new CharCollection("CCHHH"));
assertEquals(b.moreThan(3), new CharCollection("")); assertEquals(b.moreThan(3), new CharCollection(""));
assertEquals("()",b.moreThan(3).toString()); assertEquals("()",b.moreThan(3).toString());
} }
@Test @Test
public void Differenz(){ public void Differenz(){
assertEquals(a.except(new CharCollection("NASE")), new CharCollection("AAN")); assertEquals(a.except(new CharCollection("NASE")), new CharCollection("AAN"));
assertEquals(a.except(new CharCollection("KIWI")), new CharCollection("ANANAS")); assertEquals(a.except(new CharCollection("KIWI")), new CharCollection("ANANAS"));
assertEquals(a.except(new CharCollection()), new CharCollection("ANANAS")); assertEquals(a.except(new CharCollection()), new CharCollection("ANANAS"));
assertEquals(a.except(new CharCollection("ANANAS")), new CharCollection()); assertEquals(a.except(new CharCollection("ANANAS")), new CharCollection());
assertEquals(b.except(new CharCollection("CHHO")), new CharCollection("SCHULE")); assertEquals(b.except(new CharCollection("CHHO")), new CharCollection("SCHULE"));
assertEquals(c.except(new CharCollection("HOSIANNA")), new CharCollection('A')); assertEquals(c.except(new CharCollection("HOSIANNA")), new CharCollection('A'));
assertEquals(d.except(new CharCollection("ABCD")), new CharCollection()); assertEquals(d.except(new CharCollection("ABCD")), new CharCollection());
} }
@Test @Test
public void Untermenge(){ public void Untermenge(){
assertTrue(a.isSubset(new CharCollection("ANANAS"))); assertTrue(a.isSubset(new CharCollection("ANANAS")));
assertTrue(a.isSubset(new CharCollection("NASA"))); assertTrue(a.isSubset(new CharCollection("NASA")));
assertTrue(a.isSubset(new CharCollection(""))); assertTrue(a.isSubset(new CharCollection("")));
assertFalse(a.isSubset(new CharCollection("NASE"))); assertFalse(a.isSubset(new CharCollection("NASE")));
assertFalse(a.isSubset(new CharCollection("AAAA"))); assertFalse(a.isSubset(new CharCollection("AAAA")));
} }
} }

View File

@ -1,86 +1,86 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import de.joethei.hs.java2.praktikum.praktikum1.GrosseZahl; import de.joethei.hs.java2.praktikum.praktikum1.GrosseZahl;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.*; import static org.junit.Assert.*;
public class GrosseZahlTest { public class GrosseZahlTest {
@Test @Test
public void constructors() { public void constructors() {
assertEquals(new GrosseZahl("1456"), new GrosseZahl(1456)); assertEquals(new GrosseZahl("1456"), new GrosseZahl(1456));
assertNotEquals(new GrosseZahl("1234"), new GrosseZahl(1233)); assertNotEquals(new GrosseZahl("1234"), new GrosseZahl(1233));
assertNotEquals(new GrosseZahl(14), 14); assertNotEquals(new GrosseZahl(14), 14);
} }
@Test @Test
public void length() { public void length() {
assertEquals(4, new GrosseZahl("1234").length()); assertEquals(4, new GrosseZahl("1234").length());
assertNotEquals(5, new GrosseZahl(1234).length()); assertNotEquals(5, new GrosseZahl(1234).length());
} }
@Test @Test
public void numberAt() { public void numberAt() {
assertEquals(5, new GrosseZahl("125").numberAt(2)); assertEquals(5, new GrosseZahl("125").numberAt(2));
assertNotEquals(5, new GrosseZahl(125).numberAt(1)); assertNotEquals(5, new GrosseZahl(125).numberAt(1));
} }
@Test @Test
public void add() { public void add() {
assertEquals(new GrosseZahl(42), new GrosseZahl("40").add(new GrosseZahl(2))); assertEquals(new GrosseZahl(42), new GrosseZahl("40").add(new GrosseZahl(2)));
assertEquals(new GrosseZahl("42"), new GrosseZahl(40).add(new GrosseZahl(2))); assertEquals(new GrosseZahl("42"), new GrosseZahl(40).add(new GrosseZahl(2)));
assertNotEquals(new GrosseZahl(43), new GrosseZahl("40").add(new GrosseZahl(2))); assertNotEquals(new GrosseZahl(43), new GrosseZahl("40").add(new GrosseZahl(2)));
assertEquals(new GrosseZahl(200), new GrosseZahl(190).add(new GrosseZahl("10"))); assertEquals(new GrosseZahl(200), new GrosseZahl(190).add(new GrosseZahl("10")));
assertEquals(new GrosseZahl(200), new GrosseZahl(10).add(new GrosseZahl(190))); assertEquals(new GrosseZahl(200), new GrosseZahl(10).add(new GrosseZahl(190)));
assertEquals(new GrosseZahl(400), new GrosseZahl(50).add(new GrosseZahl(350))); assertEquals(new GrosseZahl(400), new GrosseZahl(50).add(new GrosseZahl(350)));
assertEquals(new GrosseZahl(4000), new GrosseZahl(500).add(new GrosseZahl(3500))); assertEquals(new GrosseZahl(4000), new GrosseZahl(500).add(new GrosseZahl(3500)));
assertEquals(new GrosseZahl(200), new GrosseZahl("198").add(new GrosseZahl(2))); assertEquals(new GrosseZahl(200), new GrosseZahl("198").add(new GrosseZahl(2)));
} }
@Test @Test
public void sub() { public void sub() {
assertEquals(new GrosseZahl(42), new GrosseZahl(100).sub(new GrosseZahl(58))); assertEquals(new GrosseZahl(42), new GrosseZahl(100).sub(new GrosseZahl(58)));
assertNotEquals(new GrosseZahl(43), new GrosseZahl(100).sub(new GrosseZahl(58))); assertNotEquals(new GrosseZahl(43), new GrosseZahl(100).sub(new GrosseZahl(58)));
assertEquals(new GrosseZahl(100), new GrosseZahl(150).sub(new GrosseZahl(50))); assertEquals(new GrosseZahl(100), new GrosseZahl(150).sub(new GrosseZahl(50)));
assertEquals(new GrosseZahl(0), new GrosseZahl(10).sub(new GrosseZahl("10"))); assertEquals(new GrosseZahl(0), new GrosseZahl(10).sub(new GrosseZahl("10")));
assertEquals(new GrosseZahl(0), new GrosseZahl(10).sub(new GrosseZahl(15))); assertEquals(new GrosseZahl(0), new GrosseZahl(10).sub(new GrosseZahl(15)));
} }
@Test @Test
public void mult() { public void mult() {
assertEquals(new GrosseZahl(15), new GrosseZahl("5").mult(new GrosseZahl(3))); assertEquals(new GrosseZahl(15), new GrosseZahl("5").mult(new GrosseZahl(3)));
assertNotEquals(new GrosseZahl("15"), new GrosseZahl("4").mult(new GrosseZahl(3))); assertNotEquals(new GrosseZahl("15"), new GrosseZahl("4").mult(new GrosseZahl(3)));
assertEquals(new GrosseZahl(90000), new GrosseZahl(9).mult(new GrosseZahl(10000))); assertEquals(new GrosseZahl(90000), new GrosseZahl(9).mult(new GrosseZahl(10000)));
} }
@Test @Test
public void less() { public void less() {
assertTrue(new GrosseZahl("1234").less(new GrosseZahl("12345"))); assertTrue(new GrosseZahl("1234").less(new GrosseZahl("12345")));
assertFalse(new GrosseZahl("12345").less(new GrosseZahl("1234"))); assertFalse(new GrosseZahl("12345").less(new GrosseZahl("1234")));
assertFalse(new GrosseZahl("1234").less(new GrosseZahl("1234"))); assertFalse(new GrosseZahl("1234").less(new GrosseZahl("1234")));
assertFalse(new GrosseZahl("1234").less(new GrosseZahl("1233"))); assertFalse(new GrosseZahl("1234").less(new GrosseZahl("1233")));
assertTrue(new GrosseZahl(1233).less(new GrosseZahl(1234))); assertTrue(new GrosseZahl(1233).less(new GrosseZahl(1234)));
} }
@Test @Test
public void toStringTest() { public void toStringTest() {
assertEquals("45", new GrosseZahl(45).toString()); assertEquals("45", new GrosseZahl(45).toString());
assertEquals("45", new GrosseZahl("45").toString()); assertEquals("45", new GrosseZahl("45").toString());
} }
@Test @Test
public void ggT() { public void ggT() {
assertEquals(new GrosseZahl(3), new GrosseZahl(45).ggT(new GrosseZahl(21))); assertEquals(new GrosseZahl(3), new GrosseZahl(45).ggT(new GrosseZahl(21)));
assertEquals(new GrosseZahl(70), new GrosseZahl(1400).ggT(new GrosseZahl(210))); assertEquals(new GrosseZahl(70), new GrosseZahl(1400).ggT(new GrosseZahl(210)));
assertNotEquals(new GrosseZahl(2), new GrosseZahl("7").ggT(new GrosseZahl(13))); assertNotEquals(new GrosseZahl(2), new GrosseZahl("7").ggT(new GrosseZahl(13)));
} }
@Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class)
public void wrongInput() { public void wrongInput() {
new GrosseZahl("42B"); new GrosseZahl("42B");
new GrosseZahl("42/"); new GrosseZahl("42/");
} }
} }

View File

@ -1,152 +1,152 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import de.joethei.hs.java2.praktikum.praktikum1.GrosseZahl; import de.joethei.hs.java2.praktikum.praktikum1.GrosseZahl;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
public class GrosseZahlTest2 { public class GrosseZahlTest2 {
private GrosseZahl i0; private GrosseZahl i0;
private GrosseZahl s0; private GrosseZahl s0;
private GrosseZahl i1; private GrosseZahl i1;
private GrosseZahl s1; private GrosseZahl s1;
private GrosseZahl i55; private GrosseZahl i55;
private GrosseZahl s55; private GrosseZahl s55;
private GrosseZahl i60; private GrosseZahl i60;
private GrosseZahl s60; private GrosseZahl s60;
private GrosseZahl i99; private GrosseZahl i99;
private GrosseZahl s99; private GrosseZahl s99;
private GrosseZahl i100; private GrosseZahl i100;
private GrosseZahl s100; private GrosseZahl s100;
private GrosseZahl i12345; private GrosseZahl i12345;
private GrosseZahl s12345; private GrosseZahl s12345;
private GrosseZahl s12345678901234567890; private GrosseZahl s12345678901234567890;
private GrosseZahl s10345678901234567891; private GrosseZahl s10345678901234567891;
private GrosseZahl i283935; private GrosseZahl i283935;
private GrosseZahl s2736; private GrosseZahl s2736;
private GrosseZahl s2737; private GrosseZahl s2737;
@Before @Before
public void setUp() { public void setUp() {
i0 = new GrosseZahl(0); i0 = new GrosseZahl(0);
s0 = new GrosseZahl("0"); s0 = new GrosseZahl("0");
i1 = new GrosseZahl(1); i1 = new GrosseZahl(1);
s1 = new GrosseZahl("1"); s1 = new GrosseZahl("1");
i55 = new GrosseZahl(55); i55 = new GrosseZahl(55);
s55 = new GrosseZahl("55"); s55 = new GrosseZahl("55");
i60 = new GrosseZahl(60); i60 = new GrosseZahl(60);
s60 = new GrosseZahl("60"); s60 = new GrosseZahl("60");
i99 = new GrosseZahl(99); i99 = new GrosseZahl(99);
s99 = new GrosseZahl("99"); s99 = new GrosseZahl("99");
i100 = new GrosseZahl(100); i100 = new GrosseZahl(100);
s100 = new GrosseZahl("100"); s100 = new GrosseZahl("100");
i12345 = new GrosseZahl(12345); i12345 = new GrosseZahl(12345);
s12345 = new GrosseZahl("12345"); s12345 = new GrosseZahl("12345");
s12345678901234567890 = new GrosseZahl("12345678901234567890"); s12345678901234567890 = new GrosseZahl("12345678901234567890");
s10345678901234567891 = new GrosseZahl("10345678901234567891"); s10345678901234567891 = new GrosseZahl("10345678901234567891");
i283935 = new GrosseZahl("283935"); i283935 = new GrosseZahl("283935");
s2736 = new GrosseZahl("2736"); s2736 = new GrosseZahl("2736");
s2737 = new GrosseZahl("2737"); s2737 = new GrosseZahl("2737");
} }
@Test @Test
public void testKonstruktor() { public void testKonstruktor() {
assertEquals("0", i0.toString()); assertEquals("0", i0.toString());
assertEquals("0", s0.toString()); assertEquals("0", s0.toString());
assertEquals("1", i1.toString()); assertEquals("1", i1.toString());
assertEquals("1", s1.toString()); assertEquals("1", s1.toString());
assertEquals("55", i55.toString()); assertEquals("55", i55.toString());
assertEquals("55", s55.toString()); assertEquals("55", s55.toString());
assertEquals("60", i60.toString()); assertEquals("60", i60.toString());
assertEquals("60", s60.toString()); assertEquals("60", s60.toString());
assertEquals("99", i99.toString()); assertEquals("99", i99.toString());
assertEquals("99", s99.toString()); assertEquals("99", s99.toString());
assertEquals("100", i100.toString()); assertEquals("100", i100.toString());
assertEquals("100", s100.toString()); assertEquals("100", s100.toString());
assertEquals("12345", i12345.toString()); assertEquals("12345", i12345.toString());
assertEquals("12345", s12345.toString()); assertEquals("12345", s12345.toString());
assertEquals("12345678901234567890", s12345678901234567890.toString()); assertEquals("12345678901234567890", s12345678901234567890.toString());
assertEquals("10345678901234567891", s10345678901234567891.toString()); assertEquals("10345678901234567891", s10345678901234567891.toString());
} }
@Test @Test
public void testLess() { public void testLess() {
assertTrue(!i0.less(s0)); assertTrue(!i0.less(s0));
assertTrue(i0.less(i1)); assertTrue(i0.less(i1));
assertTrue(!i1.less(i0)); assertTrue(!i1.less(i0));
assertTrue(!i55.less(s55)); assertTrue(!i55.less(s55));
assertTrue(i55.less(i60)); assertTrue(i55.less(i60));
assertTrue(!i60.less(i55)); assertTrue(!i60.less(i55));
assertTrue(!i99.less(s99)); assertTrue(!i99.less(s99));
assertTrue(i99.less(i100)); assertTrue(i99.less(i100));
assertTrue(!i100.less(i99)); assertTrue(!i100.less(i99));
assertTrue(!s12345678901234567890.less(s12345678901234567890)); assertTrue(!s12345678901234567890.less(s12345678901234567890));
assertTrue(s10345678901234567891.less(s12345678901234567890)); assertTrue(s10345678901234567891.less(s12345678901234567890));
assertTrue(!s12345678901234567890.less(s10345678901234567891)); assertTrue(!s12345678901234567890.less(s10345678901234567891));
} }
@Test @Test
public void testAdd() { public void testAdd() {
assertEquals("0",i0.add(i0).toString()); assertEquals("0",i0.add(i0).toString());
assertEquals("1",i1.add(i0).toString()); assertEquals("1",i1.add(i0).toString());
assertEquals("1",i0.add(i1).toString()); assertEquals("1",i0.add(i1).toString());
assertEquals("2",i1.add(s1).toString()); assertEquals("2",i1.add(s1).toString());
assertEquals("115",i55.add(s60).toString()); assertEquals("115",i55.add(s60).toString());
assertEquals("115",i60.add(s55).toString()); assertEquals("115",i60.add(s55).toString());
assertEquals("115",s55.add(i60).toString()); assertEquals("115",s55.add(i60).toString());
assertEquals("115",s60.add(i55).toString()); assertEquals("115",s60.add(i55).toString());
assertEquals("12444",i99.add(i12345).toString()); assertEquals("12444",i99.add(i12345).toString());
assertEquals("12444",i12345.add(i99).toString()); assertEquals("12444",i12345.add(i99).toString());
assertEquals("22691357802469135781",s12345678901234567890.add(s10345678901234567891).toString()); assertEquals("22691357802469135781",s12345678901234567890.add(s10345678901234567891).toString());
assertEquals("22691357802469135781",s10345678901234567891.add(s12345678901234567890).toString()); assertEquals("22691357802469135781",s10345678901234567891.add(s12345678901234567890).toString());
GrosseZahl z = new GrosseZahl(0); GrosseZahl z = new GrosseZahl(0);
for (int i=1; i<=125; i++) for (int i=1; i<=125; i++)
z=z.add(i99); z=z.add(i99);
assertEquals("12375",z.toString()); assertEquals("12375",z.toString());
} }
@Test @Test
public void testMult() { public void testMult() {
assertEquals("0",i0.mult(i0).toString()); assertEquals("0",i0.mult(i0).toString());
assertEquals("1",i1.mult(i1).toString()); assertEquals("1",i1.mult(i1).toString());
assertEquals("3300",i55.mult(s60).toString()); assertEquals("3300",i55.mult(s60).toString());
assertEquals("3300",i60.mult(s55).toString()); assertEquals("3300",i60.mult(s55).toString());
assertEquals("3300",s55.mult(i60).toString()); assertEquals("3300",s55.mult(i60).toString());
assertEquals("3300",s60.mult(i55).toString()); assertEquals("3300",s60.mult(i55).toString());
assertEquals("1222155",s12345.mult(s99).toString()); assertEquals("1222155",s12345.mult(s99).toString());
assertEquals("1222155",i12345.mult(i99).toString()); assertEquals("1222155",i12345.mult(i99).toString());
assertEquals("152407406035740740602050",s12345678901234567890.mult(s12345).toString()); assertEquals("152407406035740740602050",s12345678901234567890.mult(s12345).toString());
assertEquals("152407406035740740602050",s12345678901234567890.mult(i12345).toString()); assertEquals("152407406035740740602050",s12345678901234567890.mult(i12345).toString());
GrosseZahl z = new GrosseZahl(1); GrosseZahl z = new GrosseZahl(1);
for (int i=1; i<=9; i++) for (int i=1; i<=9; i++)
z=z.mult(i99); z=z.mult(i99);
assertEquals("913517247483640899",z.toString()); assertEquals("913517247483640899",z.toString());
} }
@Test @Test
public void testGGT() { public void testGGT() {
assertEquals("23",i283935.ggT(s2737).toString()); assertEquals("23",i283935.ggT(s2737).toString());
assertEquals("23",s2737.ggT(i283935).toString()); assertEquals("23",s2737.ggT(i283935).toString());
assertEquals("2737",s2737.ggT(s2737).toString()); assertEquals("2737",s2737.ggT(s2737).toString());
assertEquals("1",s2736.ggT(s2737).toString()); assertEquals("1",s2736.ggT(s2737).toString());
} }
} }

View File

@ -1,99 +1,99 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import de.joethei.hs.java2.praktikum.praktikum4.KlausurenServer; import de.joethei.hs.java2.praktikum.praktikum4.KlausurenServer;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import java.io.*; import java.io.*;
import java.net.Socket; import java.net.Socket;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@RunWith(OrderedRunner.class) @RunWith(OrderedRunner.class)
public class KlausurenServerTest { public class KlausurenServerTest {
private static KlausurenServer server; private static KlausurenServer server;
@BeforeClass @BeforeClass
public static void before() throws InterruptedException { public static void before() throws InterruptedException {
server = new KlausurenServer(6767); server = new KlausurenServer(6767);
Thread.sleep(500L); Thread.sleep(500L);
} }
@Test @Test
@Order(order = 1) @Order(order = 1)
public void test() { public void test() {
sendRequest("delall"); sendRequest("delall");
assertEquals("Hallo Welt", sendRequest("test")); assertEquals("Hallo Welt", sendRequest("test"));
assertEquals("0", sendRequest("getall")); assertEquals("0", sendRequest("getall"));
} }
@Test(timeout = 120L) @Test(timeout = 120L)
@Order(order = 2) @Order(order = 2)
public void put() { public void put() {
assertEquals("1 ", sendRequest("put max@maier 6, 5")); assertEquals("1 ", sendRequest("put max@maier 6, 5"));
assertEquals("1 5,6", sendRequest("put max@maier 7,8")); assertEquals("1 5,6", sendRequest("put max@maier 7,8"));
assertEquals("0", sendRequest("put max@maier")); assertEquals("0", sendRequest("put max@maier"));
} }
@Test(timeout = 60L) @Test(timeout = 60L)
@Order(order = 3) @Order(order = 3)
public void getall() { public void getall() {
assertEquals("1 ", sendRequest("put max@baum 5, 6")); assertEquals("1 ", sendRequest("put max@baum 5, 6"));
assertEquals("1 [5,6],[7,8]", sendRequest("getall")); assertEquals("1 [5,6],[7,8]", sendRequest("getall"));
} }
@Test(timeout = 500L) @Test(timeout = 500L)
@Order(order = 4) @Order(order = 4)
public void get() { public void get() {
assertEquals("1 7,8", sendRequest("get max@maier")); assertEquals("1 7,8", sendRequest("get max@maier"));
assertEquals("0", sendRequest("get max@müller")); assertEquals("0", sendRequest("get max@müller"));
assertEquals("0", sendRequest("get")); assertEquals("0", sendRequest("get"));
assertEquals("0", sendRequest("get max@müller 42")); assertEquals("0", sendRequest("get max@müller 42"));
} }
@Test(timeout = 500L) @Test(timeout = 500L)
@Order(order = 5) @Order(order = 5)
public void del() { public void del() {
assertEquals("0", sendRequest("del max@maier baum")); assertEquals("0", sendRequest("del max@maier baum"));
assertEquals("1 7,8", sendRequest("del max@maier")); assertEquals("1 7,8", sendRequest("del max@maier"));
assertEquals("0", sendRequest("del max@maier")); assertEquals("0", sendRequest("del max@maier"));
assertEquals("0", sendRequest("get max@maier")); assertEquals("0", sendRequest("get max@maier"));
} }
@Test(timeout = 2000L) @Test(timeout = 2000L)
@Order(order = 6) @Order(order = 6)
public void saved() throws InterruptedException { public void saved() throws InterruptedException {
assertEquals("1 ", sendRequest("put max@maier 5, 6, 7, 8")); assertEquals("1 ", sendRequest("put max@maier 5, 6, 7, 8"));
assertEquals("1", sendRequest("stop")); assertEquals("1", sendRequest("stop"));
//Thread.sleep(1000L); //Thread.sleep(1000L);
server = new KlausurenServer(6768); server = new KlausurenServer(6768);
Thread.sleep(100L); Thread.sleep(100L);
assertEquals("1 [5,6,7,8]", sendRequest("getall", 6768)); assertEquals("1 [5,6,7,8]", sendRequest("getall", 6768));
assertEquals("1 5,6,7,8", sendRequest("del max@maier", 6768)); assertEquals("1 5,6,7,8", sendRequest("del max@maier", 6768));
assertEquals("1 5,6", sendRequest("del max@baum", 6768)); assertEquals("1 5,6", sendRequest("del max@baum", 6768));
} }
private String sendRequest(String command, int port) { private String sendRequest(String command, int port) {
try { try {
Socket socket = new Socket("localhost", port); Socket socket = new Socket("localhost", port);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(command); writer.write(command);
writer.newLine(); writer.newLine();
writer.flush(); writer.flush();
String result = reader.readLine(); String result = reader.readLine();
socket.close(); socket.close();
return result; return result;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
private String sendRequest(String command) { private String sendRequest(String command) {
return sendRequest(command, 6767); return sendRequest(command, 6767);
} }
} }

View File

@ -1,199 +1,199 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import de.joethei.hs.java2.praktikum.praktikum4.KlausurenServer; import de.joethei.hs.java2.praktikum.praktikum4.KlausurenServer;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.net.Socket; import java.net.Socket;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
public class KlausurenServerTest2 { public class KlausurenServerTest2 {
PrintWriter ausSo; PrintWriter ausSo;
BufferedReader einSo; BufferedReader einSo;
Socket so; Socket so;
String line; String line;
public void opensocket() throws IOException { public void opensocket() throws IOException {
so = new Socket("localhost", 6769); //Port 6769 wird erwartet! so = new Socket("localhost", 6769); //Port 6769 wird erwartet!
ausSo = new PrintWriter(so.getOutputStream(), true); ausSo = new PrintWriter(so.getOutputStream(), true);
einSo = new BufferedReader(new InputStreamReader(so.getInputStream())); einSo = new BufferedReader(new InputStreamReader(so.getInputStream()));
} }
public void closesocket() throws IOException { public void closesocket() throws IOException {
so.close(); so.close();
} }
@Before @Before
public void setUp() throws IOException { public void setUp() throws IOException {
new KlausurenServer(6769); new KlausurenServer(6769);
System.out.println("INITIALISIERUNG"); System.out.println("INITIALISIERUNG");
opensocket(); opensocket();
ausSo.println("del mail1"); ausSo.println("del mail1");
line = einSo.readLine(); line = einSo.readLine();
closesocket(); closesocket();
opensocket(); opensocket();
ausSo.println("del mail2"); ausSo.println("del mail2");
line = einSo.readLine(); line = einSo.readLine();
closesocket(); closesocket();
opensocket(); opensocket();
ausSo.println("del mail3"); ausSo.println("del mail3");
line = einSo.readLine(); line = einSo.readLine();
closesocket(); closesocket();
opensocket(); opensocket();
ausSo.println("del mail4"); ausSo.println("del mail4");
line = einSo.readLine(); line = einSo.readLine();
closesocket(); closesocket();
opensocket(); opensocket();
ausSo.println("del mail5"); ausSo.println("del mail5");
line = einSo.readLine(); line = einSo.readLine();
closesocket(); closesocket();
System.out.println("INITIALISIERUNG OK"+"\n"); System.out.println("INITIALISIERUNG OK"+"\n");
} }
@Test //alles in einer Test-Methode, weil die richtige Reihenfolge sonst nicht gewährleistet ist! @Test //alles in einer Test-Methode, weil die richtige Reihenfolge sonst nicht gewährleistet ist!
public void all() throws IOException { public void all() throws IOException {
System.out.println("TEST: del mail1"); System.out.println("TEST: del mail1");
opensocket(); opensocket();
ausSo.println("del mail1"); ausSo.println("del mail1");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertEquals(line,"0"); assertEquals(line,"0");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: put mail2 22,23,24"); System.out.println("TEST: put mail2 22,23,24");
opensocket(); opensocket();
ausSo.println("put mail2 22,23,24"); ausSo.println("put mail2 22,23,24");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertTrue(line.equals("1 ")||line.equals("1")); assertTrue(line.equals("1 ")||line.equals("1"));
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: put mail2 33,34,35"); System.out.println("TEST: put mail2 33,34,35");
opensocket(); opensocket();
ausSo.println("put mail2 33,34,35"); ausSo.println("put mail2 33,34,35");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertEquals(line,"1 22,23,24"); assertEquals(line,"1 22,23,24");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: get mail2"); System.out.println("TEST: get mail2");
opensocket(); opensocket();
ausSo.println("get mail2"); ausSo.println("get mail2");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertEquals(line,"1 33,34,35"); assertEquals(line,"1 33,34,35");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: put mail3 44,45,46"); System.out.println("TEST: put mail3 44,45,46");
opensocket(); opensocket();
ausSo.println("put mail3 44,45,46"); ausSo.println("put mail3 44,45,46");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertTrue(line.equals("1 ")||line.equals("1")); assertTrue(line.equals("1 ")||line.equals("1"));
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: put mail4 44,45"); System.out.println("TEST: put mail4 44,45");
opensocket(); opensocket();
ausSo.println("put mail5 44,45"); ausSo.println("put mail5 44,45");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertTrue(line.equals("1 ")||line.equals("1")); assertTrue(line.equals("1 ")||line.equals("1"));
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: getall"); System.out.println("TEST: getall");
opensocket(); opensocket();
ausSo.println("getall"); ausSo.println("getall");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertTrue(line.equals("1 [33,34,35],[44,45,46]")||line.equals("1 [44,45,46],[33,34,35]")); assertTrue(line.equals("1 [33,34,35],[44,45,46]")||line.equals("1 [44,45,46],[33,34,35]"));
// assertEquals(line,"1 [33,34,35],[44,45,46]"); // assertEquals(line,"1 [33,34,35],[44,45,46]");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: del mail2"); System.out.println("TEST: del mail2");
opensocket(); opensocket();
ausSo.println("del mail2"); ausSo.println("del mail2");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertEquals(line,"1 33,34,35"); assertEquals(line,"1 33,34,35");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: del mail3"); System.out.println("TEST: del mail3");
opensocket(); opensocket();
ausSo.println("del mail3"); ausSo.println("del mail3");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertEquals(line,"1 44,45,46"); assertEquals(line,"1 44,45,46");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: get mail2"); System.out.println("TEST: get mail2");
opensocket(); opensocket();
ausSo.println("get mail2"); ausSo.println("get mail2");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertEquals(line,"0"); assertEquals(line,"0");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: getall"); System.out.println("TEST: getall");
opensocket(); opensocket();
ausSo.println("getall"); ausSo.println("getall");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertEquals(line,"1 [44,45]"); assertEquals(line,"1 [44,45]");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: put mail2 45,46"); System.out.println("TEST: put mail2 45,46");
opensocket(); opensocket();
ausSo.println("put mail2 45,46"); ausSo.println("put mail2 45,46");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertTrue(line.equals("1 ")||line.equals("1")); assertTrue(line.equals("1 ")||line.equals("1"));
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: put mail3 44,46"); System.out.println("TEST: put mail3 44,46");
opensocket(); opensocket();
ausSo.println("put mail3 44,46"); ausSo.println("put mail3 44,46");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertTrue(line.equals("1 ")||line.equals("1")); assertTrue(line.equals("1 ")||line.equals("1"));
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: getall"); System.out.println("TEST: getall");
opensocket(); opensocket();
ausSo.println("getall"); ausSo.println("getall");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertTrue(line.equals("1 [44,45],[44,46],[45,46]")||line.equals("1 [44,45],[45,46],[44,46]")||line.equals("1 [44,46],[44,45],[45,46]")||line.equals("1 [44,46],[45,46],[44,45]")||line.equals("1 [45,46],[44,45],[44,46]")||line.equals("1 [45,46],[44,46],[44,45]")||line.equals("1 [44,45,46]")); assertTrue(line.equals("1 [44,45],[44,46],[45,46]")||line.equals("1 [44,45],[45,46],[44,46]")||line.equals("1 [44,46],[44,45],[45,46]")||line.equals("1 [44,46],[45,46],[44,45]")||line.equals("1 [45,46],[44,45],[44,46]")||line.equals("1 [45,46],[44,46],[44,45]")||line.equals("1 [44,45,46]"));
// assertEquals(line,"1 [44,45],[44,46],[45,46]"); // assertEquals(line,"1 [44,45],[44,46],[45,46]");
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
System.out.println("TEST: stop"); System.out.println("TEST: stop");
opensocket(); opensocket();
ausSo.println("stop"); ausSo.println("stop");
line = einSo.readLine(); line = einSo.readLine();
//System.out.println(line); //System.out.println(line);
assertTrue(line.equals("1 ")||line.equals("1")); assertTrue(line.equals("1 ")||line.equals("1"));
closesocket(); closesocket();
System.out.println("TEST: OK"+"\n"); System.out.println("TEST: OK"+"\n");
} }
} }

View File

@ -1,12 +1,12 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD}) @Target({ ElementType.METHOD})
public @interface Order { public @interface Order {
public int order(); public int order();
} }

View File

@ -1,31 +1,31 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import org.junit.runners.BlockJUnit4ClassRunner; import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError; import org.junit.runners.model.InitializationError;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class OrderedRunner extends BlockJUnit4ClassRunner { public class OrderedRunner extends BlockJUnit4ClassRunner {
public OrderedRunner(Class<?> clazz) throws InitializationError { public OrderedRunner(Class<?> clazz) throws InitializationError {
super(clazz); super(clazz);
} }
@Override @Override
protected List<FrameworkMethod> computeTestMethods() { protected List<FrameworkMethod> computeTestMethods() {
List<FrameworkMethod> list = super.computeTestMethods(); List<FrameworkMethod> list = super.computeTestMethods();
List<FrameworkMethod> copy = new ArrayList<>(list); List<FrameworkMethod> copy = new ArrayList<>(list);
copy.sort((f1, f2) -> { copy.sort((f1, f2) -> {
Order o1 = f1.getAnnotation(Order.class); Order o1 = f1.getAnnotation(Order.class);
Order o2 = f2.getAnnotation(Order.class); Order o2 = f2.getAnnotation(Order.class);
if (o1 == null || o2 == null) if (o1 == null || o2 == null)
return -1; return -1;
return o1.order() - o2.order(); return o1.order() - o2.order();
}); });
return copy; return copy;
} }
} }

View File

@ -1,135 +1,135 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import de.joethei.hs.java2.praktikum.praktikum3.TextFileFormatException; import de.joethei.hs.java2.praktikum.praktikum3.TextFileFormatException;
import de.joethei.hs.java2.praktikum.praktikum3.Vorlesung; import de.joethei.hs.java2.praktikum.praktikum3.Vorlesung;
import de.joethei.hs.java2.praktikum.praktikum3.Vorlesungsverzeichnis; import de.joethei.hs.java2.praktikum.praktikum3.Vorlesungsverzeichnis;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotEquals;
public class VorlesungsverzeichnisTest { public class VorlesungsverzeichnisTest {
private Vorlesungsverzeichnis vorlesungsverzeichnis; private Vorlesungsverzeichnis vorlesungsverzeichnis;
@Before @Before
public void before() { public void before() {
try { try {
vorlesungsverzeichnis = new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen.txt")).getFile()); vorlesungsverzeichnis = new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen.txt")).getFile());
} catch (IOException | TextFileFormatException e) { } catch (IOException | TextFileFormatException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
@Test(expected = IOException.class) @Test(expected = IOException.class)
public void constructorIOException() throws IOException, TextFileFormatException { public void constructorIOException() throws IOException, TextFileFormatException {
new Vorlesungsverzeichnis("HalloWelt"); new Vorlesungsverzeichnis("HalloWelt");
} }
@Test(expected = TextFileFormatException.class) @Test(expected = TextFileFormatException.class)
public void constructorTextFileFormatException() throws IOException, TextFileFormatException { public void constructorTextFileFormatException() throws IOException, TextFileFormatException {
new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen-format.txt")).getFile()); new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen-format.txt")).getFile());
} }
@Test(expected = TextFileFormatException.class) @Test(expected = TextFileFormatException.class)
public void constructorNumberFormatException() throws IOException, TextFileFormatException { public void constructorNumberFormatException() throws IOException, TextFileFormatException {
new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen-number.txt")).getFile()); new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen-number.txt")).getFile());
} }
@Test @Test
public void titles() { public void titles() {
List<String> titles = new ArrayList<>(); List<String> titles = new ArrayList<>();
titles.add("Algorithmen und Datenstrukturen"); titles.add("Algorithmen und Datenstrukturen");
titles.add("Audio-/Videotechnik"); titles.add("Audio-/Videotechnik");
titles.add("Internet-Technologien"); titles.add("Internet-Technologien");
titles.add("Java 2"); titles.add("Java 2");
titles.add("Mathematik 2"); titles.add("Mathematik 2");
titles.add("Rechnerarchitekturen"); titles.add("Rechnerarchitekturen");
assertEquals(vorlesungsverzeichnis.titles(), titles); assertEquals(vorlesungsverzeichnis.titles(), titles);
titles.add("Hallo Welt"); titles.add("Hallo Welt");
assertNotEquals(vorlesungsverzeichnis.titles(), titles); assertNotEquals(vorlesungsverzeichnis.titles(), titles);
} }
@Test @Test
public void workaholics() { public void workaholics() {
Set<String> set = new HashSet<>(); Set<String> set = new HashSet<>();
set.add("von Coelln"); set.add("von Coelln");
set.add("Rump"); set.add("Rump");
assertEquals(vorlesungsverzeichnis.workaholics(), set); assertEquals(vorlesungsverzeichnis.workaholics(), set);
} }
@Test @Test
public void groupToTitles() { public void groupToTitles() {
Map<String, List<String>> map = vorlesungsverzeichnis.groupToTitles(); Map<String, List<String>> map = vorlesungsverzeichnis.groupToTitles();
List<String> mt2 = new ArrayList<>(); List<String> mt2 = new ArrayList<>();
mt2.add("Audio-/Videotechnik"); mt2.add("Audio-/Videotechnik");
mt2.add("Mathematik 2"); mt2.add("Mathematik 2");
List<String> e2 = new ArrayList<>(); List<String> e2 = new ArrayList<>();
e2.add("Mathematik 2"); e2.add("Mathematik 2");
List<String> i2 = new ArrayList<>(); List<String> i2 = new ArrayList<>();
i2.add("Algorithmen und Datenstrukturen"); i2.add("Algorithmen und Datenstrukturen");
i2.add("Java 2"); i2.add("Java 2");
List<String> i4 = new ArrayList<>(); List<String> i4 = new ArrayList<>();
i4.add("Internet-Technologien"); i4.add("Internet-Technologien");
i4.add("Rechnerarchitekturen"); i4.add("Rechnerarchitekturen");
assertEquals(mt2, map.get("MT2")); assertEquals(mt2, map.get("MT2"));
assertEquals(e2, map.get("E2")); assertEquals(e2, map.get("E2"));
assertEquals(i2, map.get("I2")); assertEquals(i2, map.get("I2"));
assertEquals(i4, map.get("I4")); assertEquals(i4, map.get("I4"));
} }
@Test @Test
public void multipleTitles() { public void multipleTitles() {
Map<String, List<String>> map = vorlesungsverzeichnis.multipleTitles(); Map<String, List<String>> map = vorlesungsverzeichnis.multipleTitles();
List<String> math = new ArrayList<>(); List<String> math = new ArrayList<>();
math.add("Rabe"); math.add("Rabe");
math.add("von Coelln"); math.add("von Coelln");
Collections.sort(math); Collections.sort(math);
assertEquals(map.get("Mathematik 2"), math); assertEquals(map.get("Mathematik 2"), math);
} }
@Test @Test
public void descendingTitles() { public void descendingTitles() {
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
list.add("Java 2"); list.add("Java 2");
list.add("Algorithmen und Datenstrukturen"); list.add("Algorithmen und Datenstrukturen");
list.add("Mathematik 2"); list.add("Mathematik 2");
list.add("Mathematik 2"); list.add("Mathematik 2");
list.add("Audio-/Videotechnik"); list.add("Audio-/Videotechnik");
list.add("Rechnerarchitekturen"); list.add("Rechnerarchitekturen");
list.add("Internet-Technologien"); list.add("Internet-Technologien");
assertEquals(list, vorlesungsverzeichnis.descendingTitles()); assertEquals(list, vorlesungsverzeichnis.descendingTitles());
} }
@Test @Test
public void toStringTest() { public void toStringTest() {
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
list.add("I2"); list.add("I2");
list.add("Java 2"); list.add("Java 2");
list.add("Rump"); list.add("Rump");
list.add("10"); list.add("10");
try { try {
Vorlesung vorlesung = new Vorlesung(list); Vorlesung vorlesung = new Vorlesung(list);
assertEquals(vorlesung.toString(), "I2:Java 2:Rump:10"); assertEquals(vorlesung.toString(), "I2:Java 2:Rump:10");
} catch (TextFileFormatException e) { } catch (TextFileFormatException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }

View File

@ -1,240 +1,240 @@
package de.joethei.hs.java2.tests; package de.joethei.hs.java2.tests;
import de.joethei.hs.java2.praktikum.praktikum3.TextFileFormatException; import de.joethei.hs.java2.praktikum.praktikum3.TextFileFormatException;
import de.joethei.hs.java2.praktikum.praktikum3.Vorlesung; import de.joethei.hs.java2.praktikum.praktikum3.Vorlesung;
import de.joethei.hs.java2.praktikum.praktikum3.Vorlesungsverzeichnis; import de.joethei.hs.java2.praktikum.praktikum3.Vorlesungsverzeichnis;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.*; import java.util.*;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
public class VorlesungsverzeichnisTest2 { public class VorlesungsverzeichnisTest2 {
private String filename = "src/main/resources/praktikum3/vorlesungen-db.txt"; private String filename = "src/main/resources/praktikum3/vorlesungen-db.txt";
private PrintWriter pw; private PrintWriter pw;
Class<Vorlesung> c = Vorlesung.class; // Klasse Vorlesung vorhanden? Class<Vorlesung> c = Vorlesung.class; // Klasse Vorlesung vorhanden?
@Before @Before
public void setUp() throws IOException public void setUp() throws IOException
{ {
pw = new PrintWriter(filename); pw = new PrintWriter(filename);
} }
@Test @Test
public void Titles() throws IOException, TextFileFormatException public void Titles() throws IOException, TextFileFormatException
{ {
List<String> al = new ArrayList<>(); List<String> al = new ArrayList<>();
al.add("Elektrodynamik"); al.add("Elektrodynamik");
al.add("Quantenmechanik"); al.add("Quantenmechanik");
al.add("Quantenphysik"); al.add("Quantenphysik");
al.add("Relativitätstheorie"); al.add("Relativitätstheorie");
al.add("Theoretische Physik"); al.add("Theoretische Physik");
al.add("Thermodynamik"); al.add("Thermodynamik");
pw.print( pw.print(
"A1:Relativitätstheorie:Einstein:15\n" + "A1:Relativitätstheorie:Einstein:15\n" +
"B2:Quantenmechanik:Heisenberg:17\n" + "B2:Quantenmechanik:Heisenberg:17\n" +
"C2:Quantenphysik:Planck:5\n" + "C2:Quantenphysik:Planck:5\n" +
"T4:Thermodynamik:Kelvin:78\n" + "T4:Thermodynamik:Kelvin:78\n" +
"C2:Theoretische Physik:Kelvin:54\n" + "C2:Theoretische Physik:Kelvin:54\n" +
"B2:Thermodynamik:Planck:44\n" + "B2:Thermodynamik:Planck:44\n" +
"T4:Quantenphysik:Planck:45\n" + "T4:Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:34"); "B2:Elektrodynamik:Kelvin:34");
pw.close(); pw.close();
Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename);
// System.out.println(al); // System.out.println(al);
// System.out.println(l.titles()); // System.out.println(l.titles());
assertEquals(al,l.titles()); assertEquals(al,l.titles());
} }
@Test @Test
public void Workaholics() throws IOException, TextFileFormatException public void Workaholics() throws IOException, TextFileFormatException
{ {
Set<String> s = new HashSet<>(); Set<String> s = new HashSet<>();
s.add("Planck"); s.add("Planck");
s.add("Kelvin"); s.add("Kelvin");
pw.print( pw.print(
"A1:Relativitätstheorie:Einstein:15\n" + "A1:Relativitätstheorie:Einstein:15\n" +
"B2:Quantenmechanik:Heisenberg:17\n" + "B2:Quantenmechanik:Heisenberg:17\n" +
"C2:Quantenphysik:Planck:5\n" + "C2:Quantenphysik:Planck:5\n" +
"T4:Thermodynamik:Kelvin:78\n" + "T4:Thermodynamik:Kelvin:78\n" +
"C2:Theoretische Physik:Kelvin:54\n" + "C2:Theoretische Physik:Kelvin:54\n" +
"B2:Thermodynamik:Planck:44\n" + "B2:Thermodynamik:Planck:44\n" +
"T4:Quantenphysik:Planck:45\n" + "T4:Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:34"); "B2:Elektrodynamik:Kelvin:34");
pw.close(); pw.close();
Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename);
// System.out.println(s); // System.out.println(s);
// System.out.println(l.workaholics()); // System.out.println(l.workaholics());
assertEquals(s,l.workaholics()); assertEquals(s,l.workaholics());
} }
@Test @Test
public void GroupToTitles() throws IOException, TextFileFormatException public void GroupToTitles() throws IOException, TextFileFormatException
{ {
Map<String, List<String>> map2 = new HashMap<>(); Map<String, List<String>> map2 = new HashMap<>();
List<String> s1 = new ArrayList<>(); List<String> s1 = new ArrayList<>();
List<String> s2 = new ArrayList<>(); List<String> s2 = new ArrayList<>();
List<String> s3a = new ArrayList<>(); List<String> s3a = new ArrayList<>();
List<String> s3b = new ArrayList<>(); List<String> s3b = new ArrayList<>();
List<String> s4a = new ArrayList<>(); List<String> s4a = new ArrayList<>();
List<String> s4b = new ArrayList<>(); List<String> s4b = new ArrayList<>();
s1.add("Relativitätstheorie"); s1.add("Relativitätstheorie");
map2.put("A1",s1); map2.put("A1",s1);
s2.add("Quantenmechanik"); s2.add("Quantenmechanik");
s2.add("Thermodynamik"); s2.add("Thermodynamik");
s2.add("Elektrodynamik"); s2.add("Elektrodynamik");
map2.put("B2",s2); map2.put("B2",s2);
s3a.add("Quantenphysik"); s3a.add("Quantenphysik");
s3a.add("Theoretische Physik"); s3a.add("Theoretische Physik");
s3b.add("Theoretische Physik"); s3b.add("Theoretische Physik");
s3b.add("Quantenphysik"); s3b.add("Quantenphysik");
map2.put("C2",s3a); map2.put("C2",s3a);
s4a.add("Thermodynamik"); s4a.add("Thermodynamik");
s4a.add("Quantenphysik"); s4a.add("Quantenphysik");
map2.put("T4",s4a); map2.put("T4",s4a);
s4b.add("Quantenphysik"); s4b.add("Quantenphysik");
s4b.add("Thermodynamik"); s4b.add("Thermodynamik");
pw.print( pw.print(
"A1:Relativitätstheorie:Einstein:15\n" + "A1:Relativitätstheorie:Einstein:15\n" +
"B2:Quantenmechanik:Heisenberg:17\n" + "B2:Quantenmechanik:Heisenberg:17\n" +
"C2:Quantenphysik:Planck:5\n" + "C2:Quantenphysik:Planck:5\n" +
"T4:Thermodynamik:Kelvin:78\n" + "T4:Thermodynamik:Kelvin:78\n" +
"C2:Theoretische Physik:Kelvin:54\n" + "C2:Theoretische Physik:Kelvin:54\n" +
"B2:Thermodynamik:Planck:44\n" + "B2:Thermodynamik:Planck:44\n" +
"T4:Quantenphysik:Planck:45\n" + "T4:Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:34"); "B2:Elektrodynamik:Kelvin:34");
pw.close(); pw.close();
Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename);
// System.out.println(map2); // System.out.println(map2);
// System.out.println(l.groupToTitles()); // System.out.println(l.groupToTitles());
// assertEquals(map2,l.groupToTitles()); // assertEquals(map2,l.groupToTitles());
assertEquals(s1, l.groupToTitles().get("A1")); assertEquals(s1, l.groupToTitles().get("A1"));
assertTrue(s3a.equals(l.groupToTitles().get("C2")) || s3b.equals(l.groupToTitles().get("C2"))); assertTrue(s3a.equals(l.groupToTitles().get("C2")) || s3b.equals(l.groupToTitles().get("C2")));
assertTrue(s4a.equals(l.groupToTitles().get("T4")) || s4b.equals(l.groupToTitles().get("T4"))); assertTrue(s4a.equals(l.groupToTitles().get("T4")) || s4b.equals(l.groupToTitles().get("T4")));
} }
@Test @Test
public void multipleTitles() throws IOException, TextFileFormatException public void multipleTitles() throws IOException, TextFileFormatException
{ {
Map<String, List<String>> map2 = new HashMap<>(); Map<String, List<String>> map2 = new HashMap<>();
List<String> s1a = new ArrayList<>(); List<String> s1a = new ArrayList<>();
List<String> s1b = new ArrayList<>(); List<String> s1b = new ArrayList<>();
s1a.add("Kelvin"); s1a.add("Kelvin");
s1a.add("Planck"); s1a.add("Planck");
s1b.add("Planck"); s1b.add("Planck");
s1b.add("Kelvin"); s1b.add("Kelvin");
map2.put("Thermodynamik",s1a); map2.put("Thermodynamik",s1a);
pw.print( pw.print(
"A1:Relativitätstheorie:Einstein:15\n" + "A1:Relativitätstheorie:Einstein:15\n" +
"B2:Quantenmechanik:Heisenberg:17\n" + "B2:Quantenmechanik:Heisenberg:17\n" +
"C2:Quantenphysik:Planck:5\n" + "C2:Quantenphysik:Planck:5\n" +
"T4:Thermodynamik:Kelvin:78\n" + "T4:Thermodynamik:Kelvin:78\n" +
"C2:Theoretische Physik:Kelvin:54\n" + "C2:Theoretische Physik:Kelvin:54\n" +
"B2:Thermodynamik:Planck:44\n" + "B2:Thermodynamik:Planck:44\n" +
"T4:Quantenphysik:Planck:45\n" + "T4:Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:34"); "B2:Elektrodynamik:Kelvin:34");
pw.close(); pw.close();
Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename);
// System.out.println(map2); // System.out.println(map2);
// System.out.println(l.multipleTitles()); // System.out.println(l.multipleTitles());
// assertEquals(map2,l.multipleTitles()); // assertEquals(map2,l.multipleTitles());
assertTrue(s1a.equals(l.multipleTitles().get("Thermodynamik")) || s1b.equals(l.multipleTitles().get("Thermodynamik"))); assertTrue(s1a.equals(l.multipleTitles().get("Thermodynamik")) || s1b.equals(l.multipleTitles().get("Thermodynamik")));
} }
@Test @Test
public void descendingTitles() throws IOException, TextFileFormatException public void descendingTitles() throws IOException, TextFileFormatException
{ {
{ {
List<String> al = new ArrayList<>(); List<String> al = new ArrayList<>();
al.add("Thermodynamik"); al.add("Thermodynamik");
al.add("Theoretische Physik"); al.add("Theoretische Physik");
al.add("Quantenphysik"); al.add("Quantenphysik");
al.add("Thermodynamik"); al.add("Thermodynamik");
al.add("Elektrodynamik"); al.add("Elektrodynamik");
al.add("Quantenmechanik"); al.add("Quantenmechanik");
al.add("Relativitätstheorie"); al.add("Relativitätstheorie");
al.add("Quantenphysik"); al.add("Quantenphysik");
pw.print( pw.print(
"A1:Relativitätstheorie:Einstein:15\n" + "A1:Relativitätstheorie:Einstein:15\n" +
"B2:Quantenmechanik:Heisenberg:17\n" + "B2:Quantenmechanik:Heisenberg:17\n" +
"C2:Quantenphysik:Planck:5\n" + "C2:Quantenphysik:Planck:5\n" +
"T4:Thermodynamik:Kelvin:78\n" + "T4:Thermodynamik:Kelvin:78\n" +
"C2:Theoretische Physik:Kelvin:54\n" + "C2:Theoretische Physik:Kelvin:54\n" +
"B2:Thermodynamik:Planck:44\n" + "B2:Thermodynamik:Planck:44\n" +
"T4:Quantenphysik:Planck:45\n" + "T4:Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:34"); "B2:Elektrodynamik:Kelvin:34");
pw.close(); pw.close();
Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename);
// System.out.println(al); // System.out.println(al);
// System.out.println(l.descendingTitles()); // System.out.println(l.descendingTitles());
assertEquals(al,l.descendingTitles()); assertEquals(al,l.descendingTitles());
} }
} }
@Test(expected=TextFileFormatException.class) @Test(expected=TextFileFormatException.class)
public void Liste_zu_kurz() throws IOException, TextFileFormatException { public void Liste_zu_kurz() throws IOException, TextFileFormatException {
pw.print( pw.print(
"C2:Theoretische Physik:Kelvin:54\n" + "C2:Theoretische Physik:Kelvin:54\n" +
"B2:Thermodynamik:Planck\n" + "B2:Thermodynamik:Planck\n" +
"T4:Quantenphysik:Planck:45\n" + "T4:Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:34"); "B2:Elektrodynamik:Kelvin:34");
pw.close(); pw.close();
Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename);
} }
@Test(expected=TextFileFormatException.class) @Test(expected=TextFileFormatException.class)
public void Liste_zu_lang() throws IOException, TextFileFormatException { public void Liste_zu_lang() throws IOException, TextFileFormatException {
pw.print( pw.print(
"C2:Theoretische Physik:Kelvin:54:55\n" + "C2:Theoretische Physik:Kelvin:54:55\n" +
"B2:Thermodynamik:Planck:44\n" + "B2:Thermodynamik:Planck:44\n" +
"T4:Quantenphysik:Planck:45\n" + "T4:Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:34"); "B2:Elektrodynamik:Kelvin:34");
pw.close(); pw.close();
Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename);
} }
@Test(expected=TextFileFormatException.class) @Test(expected=TextFileFormatException.class)
public void Listenfeld_leer() throws IOException, TextFileFormatException { public void Listenfeld_leer() throws IOException, TextFileFormatException {
pw.print( pw.print(
"C2:Theoretische Physik:Kelvin:54\n" + "C2:Theoretische Physik:Kelvin:54\n" +
"B2:Thermodynamik:Planck:44\n" + "B2:Thermodynamik:Planck:44\n" +
":Quantenphysik:Planck:45\n" + ":Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:34"); "B2:Elektrodynamik:Kelvin:34");
pw.close(); pw.close();
Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename);
} }
@Test(expected=TextFileFormatException.class) @Test(expected=TextFileFormatException.class)
public void Teilnehmerzahl_keine_Zahl() throws IOException, TextFileFormatException { public void Teilnehmerzahl_keine_Zahl() throws IOException, TextFileFormatException {
pw.print( pw.print(
"C2:Theoretische Physik:Kelvin:54\n" + "C2:Theoretische Physik:Kelvin:54\n" +
"B2:Thermodynamik:Planck:44\n" + "B2:Thermodynamik:Planck:44\n" +
"T4:Quantenphysik:Planck:45\n" + "T4:Quantenphysik:Planck:45\n" +
"B2:Elektrodynamik:Kelvin:ABC"); "B2:Elektrodynamik:Kelvin:ABC");
pw.close(); pw.close();
Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename);
} }
} }