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
java2.iml
Java 2.iml
java2.iml
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://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=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=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=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=reliability_rating">
<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=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=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=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=sqale_index">
<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"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<name>Java 2</name>
<groupId>de.joethei.hs</groupId>
<artifactId>java2</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<test>de.joethei.hs.java2.tests.*</test>
</configuration>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>4.12.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<name>Java 2</name>
<groupId>de.joethei.hs</groupId>
<artifactId>java2</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<test>de.joethei.hs.java2.tests.*</test>
</configuration>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>4.12.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,159 +1,159 @@
package de.joethei.hs.java2.praktikum.praktikum1;
public class GrosseZahl {
private int zahl[];
public GrosseZahl(String d) {
Boolean korrekteEingabe=true;
for(int i=0; i<d.length(); i++) {
if(d.charAt(i) < '0' || d.charAt(i) > '9') {
korrekteEingabe = false;
}
}
if(korrekteEingabe) {
zahl = new int[d.length()];
for(int w=0; w<d.length(); w++) {
zahl[w] = Integer.parseInt(String.valueOf(d.charAt(w)));
}
} else {
throw new IllegalArgumentException("falscher Input");
}
}
public GrosseZahl(int i) {
this(Integer.toString(i));
}
public boolean less(GrosseZahl b) {
if(this.zahl.length < b.zahl.length) return true;
if(this.zahl.length > b.zahl.length) return false;
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 true;
}
return false;
}
public GrosseZahl add(GrosseZahl b) {
int uebertrag = 0;
GrosseZahl rueckgabe, operand;
if(this.less(b)) {
rueckgabe = new GrosseZahl(b.toString());
operand = new GrosseZahl(this.toString());
} else {
rueckgabe = new GrosseZahl(this.toString());
operand = new GrosseZahl(b.toString());
}
for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) {
rueckgabe.zahl[i] += uebertrag;
uebertrag = 0;
if(w>=0) {
rueckgabe.zahl[i] += operand.zahl[w];
}
if(rueckgabe.zahl[i] > 9) {
rueckgabe.zahl[i] -= 10;
uebertrag = 1;
}
if(i==0 && uebertrag==1) {
return new GrosseZahl("1"+rueckgabe.toString());
}
}
return rueckgabe;
}
public GrosseZahl sub(GrosseZahl b) {
int uebertrag = 0;
StringBuilder x;
if(this.equals(b)) {
return new GrosseZahl(0);
} else if(this.less(b)) {
return new GrosseZahl(0);
}
GrosseZahl rueckgabe = new GrosseZahl(this.toString());
GrosseZahl operand = new GrosseZahl(b.toString());
for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) {
if(w>=0) {
rueckgabe.zahl[i] -= operand.zahl[w];
}
rueckgabe.zahl[i] -= uebertrag;
uebertrag = 0;
if(rueckgabe.zahl[i] < 0) {
rueckgabe.zahl[i] += 10;
uebertrag += 1;
}
}
while(rueckgabe.zahl[0] == 0) {
x = new StringBuilder();
for(int i = 1; i<rueckgabe.zahl.length; i++) {
x.append(rueckgabe.zahl[i]);
}
rueckgabe = new GrosseZahl(x.toString());
}
return rueckgabe;
}
public GrosseZahl mult(GrosseZahl b) {
GrosseZahl rueckgabe, rueckgabe_b, operand, operand2;
rueckgabe_b = new GrosseZahl(0);
if(this.less(b)) {
operand2 = b;
operand = this;
} else {
operand2 = this;
operand = b;
}
for(int i = 0; i<operand.zahl.length; i++) {
rueckgabe = new GrosseZahl(0);
for(int w = 0; w<operand.zahl[i]; w++) {
rueckgabe = rueckgabe.add(operand2);
}
rueckgabe_b = rueckgabe_b.add(rueckgabe);
if(i != operand.zahl.length-1) {
rueckgabe_b = new GrosseZahl(rueckgabe_b.toString()+"0");
}
}
return rueckgabe_b;
}
public int length() {
return zahl.length;
}
public int numberAt(int i) {
return zahl[i];
}
public GrosseZahl ggT(GrosseZahl b) {
GrosseZahl operand1 = new GrosseZahl(this.toString());
GrosseZahl operand2 = new GrosseZahl(b.toString());
if(operand1.equals(operand2)) return operand1;
else if(operand1.less(operand2)) return operand1.ggT(operand2.sub(operand1));
else return operand1.sub(operand2).ggT(operand2);
}
@Override
public String toString() {
StringBuilder rueckgabe = new StringBuilder();
for (int aZahl : zahl) {
rueckgabe.append(Integer.toString(aZahl));
}
return rueckgabe.toString();
}
@Override
public boolean equals(Object o) {
if(o instanceof GrosseZahl) {
GrosseZahl tmp = (GrosseZahl) o;
if(tmp.zahl.length == this.zahl.length) {
for(int i = this.zahl.length - 1; i >= 0; i--) {
if(tmp.zahl[i] != this.zahl[i]) return false;
}
return true;
}else return false;
}
return false;
}
}
package de.joethei.hs.java2.praktikum.praktikum1;
public class GrosseZahl {
private int zahl[];
public GrosseZahl(String d) {
Boolean korrekteEingabe=true;
for(int i=0; i<d.length(); i++) {
if(d.charAt(i) < '0' || d.charAt(i) > '9') {
korrekteEingabe = false;
}
}
if(korrekteEingabe) {
zahl = new int[d.length()];
for(int w=0; w<d.length(); w++) {
zahl[w] = Integer.parseInt(String.valueOf(d.charAt(w)));
}
} else {
throw new IllegalArgumentException("falscher Input");
}
}
public GrosseZahl(int i) {
this(Integer.toString(i));
}
public boolean less(GrosseZahl b) {
if(this.zahl.length < b.zahl.length) return true;
if(this.zahl.length > b.zahl.length) return false;
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 true;
}
return false;
}
public GrosseZahl add(GrosseZahl b) {
int uebertrag = 0;
GrosseZahl rueckgabe, operand;
if(this.less(b)) {
rueckgabe = new GrosseZahl(b.toString());
operand = new GrosseZahl(this.toString());
} else {
rueckgabe = new GrosseZahl(this.toString());
operand = new GrosseZahl(b.toString());
}
for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) {
rueckgabe.zahl[i] += uebertrag;
uebertrag = 0;
if(w>=0) {
rueckgabe.zahl[i] += operand.zahl[w];
}
if(rueckgabe.zahl[i] > 9) {
rueckgabe.zahl[i] -= 10;
uebertrag = 1;
}
if(i==0 && uebertrag==1) {
return new GrosseZahl("1"+rueckgabe.toString());
}
}
return rueckgabe;
}
public GrosseZahl sub(GrosseZahl b) {
int uebertrag = 0;
StringBuilder x;
if(this.equals(b)) {
return new GrosseZahl(0);
} else if(this.less(b)) {
return new GrosseZahl(0);
}
GrosseZahl rueckgabe = new GrosseZahl(this.toString());
GrosseZahl operand = new GrosseZahl(b.toString());
for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) {
if(w>=0) {
rueckgabe.zahl[i] -= operand.zahl[w];
}
rueckgabe.zahl[i] -= uebertrag;
uebertrag = 0;
if(rueckgabe.zahl[i] < 0) {
rueckgabe.zahl[i] += 10;
uebertrag += 1;
}
}
while(rueckgabe.zahl[0] == 0) {
x = new StringBuilder();
for(int i = 1; i<rueckgabe.zahl.length; i++) {
x.append(rueckgabe.zahl[i]);
}
rueckgabe = new GrosseZahl(x.toString());
}
return rueckgabe;
}
public GrosseZahl mult(GrosseZahl b) {
GrosseZahl rueckgabe, rueckgabe_b, operand, operand2;
rueckgabe_b = new GrosseZahl(0);
if(this.less(b)) {
operand2 = b;
operand = this;
} else {
operand2 = this;
operand = b;
}
for(int i = 0; i<operand.zahl.length; i++) {
rueckgabe = new GrosseZahl(0);
for(int w = 0; w<operand.zahl[i]; w++) {
rueckgabe = rueckgabe.add(operand2);
}
rueckgabe_b = rueckgabe_b.add(rueckgabe);
if(i != operand.zahl.length-1) {
rueckgabe_b = new GrosseZahl(rueckgabe_b.toString()+"0");
}
}
return rueckgabe_b;
}
public int length() {
return zahl.length;
}
public int numberAt(int i) {
return zahl[i];
}
public GrosseZahl ggT(GrosseZahl b) {
GrosseZahl operand1 = new GrosseZahl(this.toString());
GrosseZahl operand2 = new GrosseZahl(b.toString());
if(operand1.equals(operand2)) return operand1;
else if(operand1.less(operand2)) return operand1.ggT(operand2.sub(operand1));
else return operand1.sub(operand2).ggT(operand2);
}
@Override
public String toString() {
StringBuilder rueckgabe = new StringBuilder();
for (int aZahl : zahl) {
rueckgabe.append(Integer.toString(aZahl));
}
return rueckgabe.toString();
}
@Override
public boolean equals(Object o) {
if(o instanceof GrosseZahl) {
GrosseZahl tmp = (GrosseZahl) o;
if(tmp.zahl.length == this.zahl.length) {
for(int i = this.zahl.length - 1; i >= 0; i--) {
if(tmp.zahl[i] != this.zahl[i]) return false;
}
return true;
}else 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.
Definieren Sie folgende Methoden:
GrosseZahl(String d)
Erzeugt eine Zahl, deren Dezimaldarstellung in d gegeben ist. d besteht ausschließlich aus Dezimalziffern.
GrosseZahl(int i)
Erzeugt eine Zahl mit dem Wert von i.
String toString()
Gibt die Zahl als String zurück.
boolean less(GrosseZahl b)
Liefert true, wenn diese Zahl echt kleiner als b ist.
GrosseZahl add(GrosseZahl b)
Liefert eine neue Zahl mit der Summe dieser Zahl und b. Das this-Objekt wird nicht verändert.
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!
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.
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:
GrosseZahl(String d)
Erzeugt eine Zahl, deren Dezimaldarstellung in d gegeben ist. d besteht ausschließlich aus Dezimalziffern.
GrosseZahl(int i)
Erzeugt eine Zahl mit dem Wert von i.
String toString()
Gibt die Zahl als String zurück.
boolean less(GrosseZahl b)
Liefert true, wenn diese Zahl echt kleiner als b ist.
GrosseZahl add(GrosseZahl b)
Liefert eine neue Zahl mit der Summe dieser Zahl und b. Das this-Objekt wird nicht verändert.
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!
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.
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;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CharCollection implements Cloneable{
private List<Character> list = new ArrayList<>();
public CharCollection(char... cc) {
for(char c:cc) this.list.add(c);
}
public CharCollection(String s) {
for(char c : s.toCharArray()) {
this.list.add(c);
}
}
public int size() {
return this.list.size();
}
public int count(char c) {
int result = 0;
for(char b:list) {
if(b == c)result ++;
}
return result;
}
public int different() {
Set<Character> set = new HashSet<>(list);
return set.size();
}
public char top() {
if(list.isEmpty()) return 0;
int max = 0;
char character ='_';
for(char c : list) {
int count = count(c);
if(count >= max) {
character = c;
max = count;
}
}
return character;
}
public CharCollection moreThan(int m) {
ArrayList<Character> list2 = new ArrayList<>();
for(char c:this.list){
if(this.count(c) > m) {
list2.add(c);
}
}
StringBuilder s = new StringBuilder();
for(char c:list2) s.append(c);
return new CharCollection(s.toString());
}
public CharCollection except(CharCollection cc) {
ArrayList<Character> list= new ArrayList<>(this.list);
boolean removeCharacterOnce = false;
for(int i=0; i<list.size(); i++){
for(int w=0; w<cc.list.size(); w++) {
if(cc.list.get(w)==list.get(i) && !removeCharacterOnce) {
removeCharacterOnce=true;
cc.list.remove(w);
list.remove(i);
}
}
if(removeCharacterOnce) i--;
removeCharacterOnce = false;
}
StringBuilder s = new StringBuilder();
for(char c:list) s.append(c);
return new CharCollection(s.toString());
}
public boolean isSubset(CharCollection cc) {
ArrayList<Character> list = new ArrayList<>(this.list);
for(char c:cc.list) {
if(!list.contains(c)) return false;
else list.remove(list.indexOf(c));
}
return true;
}
@Override
public String toString() {
return list.toString().replace('[', '(').replace(']', ')');
}
@Override
public boolean equals(Object o) {
if(o instanceof CharCollection) {
CharCollection c = (CharCollection) o;
if(this.size() != c.size()) return false;
return this.isSubset(c);
}return false;
}
package de.joethei.hs.java2.praktikum.praktikum2;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CharCollection implements Cloneable{
private List<Character> list = new ArrayList<>();
public CharCollection(char... cc) {
for(char c:cc) this.list.add(c);
}
public CharCollection(String s) {
for(char c : s.toCharArray()) {
this.list.add(c);
}
}
public int size() {
return this.list.size();
}
public int count(char c) {
int result = 0;
for(char b:list) {
if(b == c)result ++;
}
return result;
}
public int different() {
Set<Character> set = new HashSet<>(list);
return set.size();
}
public char top() {
if(list.isEmpty()) return 0;
int max = 0;
char character ='_';
for(char c : list) {
int count = count(c);
if(count >= max) {
character = c;
max = count;
}
}
return character;
}
public CharCollection moreThan(int m) {
ArrayList<Character> list2 = new ArrayList<>();
for(char c:this.list){
if(this.count(c) > m) {
list2.add(c);
}
}
StringBuilder s = new StringBuilder();
for(char c:list2) s.append(c);
return new CharCollection(s.toString());
}
public CharCollection except(CharCollection cc) {
ArrayList<Character> list= new ArrayList<>(this.list);
boolean removeCharacterOnce = false;
for(int i=0; i<list.size(); i++){
for(int w=0; w<cc.list.size(); w++) {
if(cc.list.get(w)==list.get(i) && !removeCharacterOnce) {
removeCharacterOnce=true;
cc.list.remove(w);
list.remove(i);
}
}
if(removeCharacterOnce) i--;
removeCharacterOnce = false;
}
StringBuilder s = new StringBuilder();
for(char c:list) s.append(c);
return new CharCollection(s.toString());
}
public boolean isSubset(CharCollection cc) {
ArrayList<Character> list = new ArrayList<>(this.list);
for(char c:cc.list) {
if(!list.contains(c)) return false;
else list.remove(list.indexOf(c));
}
return true;
}
@Override
public String toString() {
return list.toString().replace('[', '(').replace(']', ')');
}
@Override
public boolean equals(Object o) {
if(o instanceof CharCollection) {
CharCollection c = (CharCollection) o;
if(this.size() != c.size()) return false;
return this.isSubset(c);
}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:
(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:
CharCollection(char... cc)
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(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:
CharCollection cc = new CharCollection("ABRAKADABRA");
int size()
Liefert die Anzahl Buchstaben der Sammlung. Zum Beispiel:
System.out.println(cc.size()); // 11
int count(char c)
Liefert die Anzahl Vorkommen des Buchstabens c. Beispiele:
System.out.println(cc.count('R')); // 2
System.out.println(cc.count('X')); // 0
int different()
Liefert die Anzahl verschiedener Buchstaben in der Sammlung. Zum Beispiel:
System.out.println(cc.different()); // 5
char top()
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
Eine leere Sammlung liefert das Zeichen mit dem Zeichencode 0zurück.
public String toString()
Liefert eine lesbare Darstellung der Sammlung.
System.out.println(cc); // (A, B, R, A, K, A, D, A, B, R, A)
Die Reihenfolge der Elemente ist irrelevant.
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:
System.out.println(cc.moreThan(1)); // (A, B, R, A, A, A, B, R, A)
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.
CharCollection except(CharCollection cc)
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)
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:
System.out.println(cc.isSubset(new CharCollection("ABRAAA"))); // true
Ihre Lösung muss intern als Objektvariable eine List<Character> zur Speicherung der Buchstabensammlung verwenden!
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)
Definieren Sie auf der Grundlage einer ArrayList eine Klasse CharCollection, deren Elemente Sammlungen repräsentieren. CharCollection bietet folgende Funktionalität:
CharCollection(char... cc)
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(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:
CharCollection cc = new CharCollection("ABRAKADABRA");
int size()
Liefert die Anzahl Buchstaben der Sammlung. Zum Beispiel:
System.out.println(cc.size()); // 11
int count(char c)
Liefert die Anzahl Vorkommen des Buchstabens c. Beispiele:
System.out.println(cc.count('R')); // 2
System.out.println(cc.count('X')); // 0
int different()
Liefert die Anzahl verschiedener Buchstaben in der Sammlung. Zum Beispiel:
System.out.println(cc.different()); // 5
char top()
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
Eine leere Sammlung liefert das Zeichen mit dem Zeichencode 0zurück.
public String toString()
Liefert eine lesbare Darstellung der Sammlung.
System.out.println(cc); // (A, B, R, A, K, A, D, A, B, R, A)
Die Reihenfolge der Elemente ist irrelevant.
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:
System.out.println(cc.moreThan(1)); // (A, B, R, A, A, A, B, R, A)
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.
CharCollection except(CharCollection cc)
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)
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:
System.out.println(cc.isSubset(new CharCollection("ABRAAA"))); // true
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;
public class TextFileFormatException extends Exception{
public TextFileFormatException(String s) {
super(s);
}
package de.joethei.hs.java2.praktikum.praktikum3;
public class TextFileFormatException extends Exception{
public TextFileFormatException(String s) {
super(s);
}
}

View File

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

View File

@ -1,112 +1,112 @@
package de.joethei.hs.java2.praktikum.praktikum3;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
public class Vorlesungsverzeichnis implements Comparator<Vorlesung>{
private Set<Vorlesung> vorlesungen = new HashSet<>();
public Vorlesungsverzeichnis(String filename) throws IOException, TextFileFormatException {
List<List<String>> datenbasis = load(filename);
for (List<String> entry : datenbasis) {
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");
vorlesungen.add(new Vorlesung(entry));
}
}
/**
* Lädt die Datenbasis von einer Datei
* @param filename Dateiname
* @return Liste der Einträge
* @throws IOException Dateifehler
*/
private List<List<String>> load(String filename) throws IOException {
List<List<String>> result = new ArrayList<>();
try(BufferedReader br = new BufferedReader(new FileReader(filename))) {
for (String line = br.readLine(); line != null; line = br.readLine())
result.add(Arrays.asList(line.split(":")));
return result;
}
}
/**
* @return eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen.
*/
public List<String> titles() {
SortedSet<String> set = new TreeSet<>();
vorlesungen.forEach(vorlesung -> set.add(vorlesung.getTitle()));
return new ArrayList<>(set);
}
/**
* @return die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten.
*/
public Set<String> workaholics() {
Map<String, Set<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getDozent,
Collectors.mapping(Vorlesung::getTitle, Collectors.toSet())));
Set<String> set = new HashSet<>();
map.forEach((s, strings) -> {
if(strings.size() >= 2) set.add(s);
});
return set;
}
/**
* @return eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet.
*/
public Map<String, List<String>> groupToTitles() {
Map<String, List<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getStudiengruppe,
Collectors.mapping(Vorlesung::getTitle, Collectors.toList())));
map.forEach((s, strings) -> Collections.sort(strings));
return map;
}
/**
* @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.
*/
public Map<String, List<String>> multipleTitles() {
Map<String, List<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getTitle,
Collectors.mapping(Vorlesung::getDozent, Collectors.toList())));
Iterator<Map.Entry<String, List<String>>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, List<String>> entry = iterator.next();
if(entry.getValue().size() < 2) iterator.remove();
Collections.sort(entry.getValue());
}
return map;
}
/**
* @return Liste mit Vorlesungstitel absteigend sortiert nach Teilnehmerzahl
*/
public List<String> descendingTitles() {
SortedSet<Vorlesung> set = new TreeSet<>(this.reversed());
set.addAll(vorlesungen);
List<String> list = new ArrayList<>();
set.forEach(vorlesung -> list.add(vorlesung.getTitle()));
return list;
}
/**
* für die aufsteigende Sortierung
*/
@Override
public int compare(Vorlesung o1, Vorlesung o2) {
return Integer.compare(o1.getTeilnehmerzahl(), o2.getTeilnehmerzahl());
}
package de.joethei.hs.java2.praktikum.praktikum3;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
public class Vorlesungsverzeichnis implements Comparator<Vorlesung>{
private Set<Vorlesung> vorlesungen = new HashSet<>();
public Vorlesungsverzeichnis(String filename) throws IOException, TextFileFormatException {
List<List<String>> datenbasis = load(filename);
for (List<String> entry : datenbasis) {
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");
vorlesungen.add(new Vorlesung(entry));
}
}
/**
* Lädt die Datenbasis von einer Datei
* @param filename Dateiname
* @return Liste der Einträge
* @throws IOException Dateifehler
*/
private List<List<String>> load(String filename) throws IOException {
List<List<String>> result = new ArrayList<>();
try(BufferedReader br = new BufferedReader(new FileReader(filename))) {
for (String line = br.readLine(); line != null; line = br.readLine())
result.add(Arrays.asList(line.split(":")));
return result;
}
}
/**
* @return eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen.
*/
public List<String> titles() {
SortedSet<String> set = new TreeSet<>();
vorlesungen.forEach(vorlesung -> set.add(vorlesung.getTitle()));
return new ArrayList<>(set);
}
/**
* @return die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten.
*/
public Set<String> workaholics() {
Map<String, Set<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getDozent,
Collectors.mapping(Vorlesung::getTitle, Collectors.toSet())));
Set<String> set = new HashSet<>();
map.forEach((s, strings) -> {
if(strings.size() >= 2) set.add(s);
});
return set;
}
/**
* @return eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet.
*/
public Map<String, List<String>> groupToTitles() {
Map<String, List<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getStudiengruppe,
Collectors.mapping(Vorlesung::getTitle, Collectors.toList())));
map.forEach((s, strings) -> Collections.sort(strings));
return map;
}
/**
* @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.
*/
public Map<String, List<String>> multipleTitles() {
Map<String, List<String>> map = vorlesungen.stream().collect(
Collectors.groupingBy(Vorlesung::getTitle,
Collectors.mapping(Vorlesung::getDozent, Collectors.toList())));
Iterator<Map.Entry<String, List<String>>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, List<String>> entry = iterator.next();
if(entry.getValue().size() < 2) iterator.remove();
Collections.sort(entry.getValue());
}
return map;
}
/**
* @return Liste mit Vorlesungstitel absteigend sortiert nach Teilnehmerzahl
*/
public List<String> descendingTitles() {
SortedSet<Vorlesung> set = new TreeSet<>(this.reversed());
set.addAll(vorlesungen);
List<String> list = new ArrayList<>();
set.forEach(vorlesung -> list.add(vorlesung.getTitle()));
return list;
}
/**
* für die aufsteigende Sortierung
*/
@Override
public int compare(Vorlesung o1, Vorlesung o2) {
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:
Studiengruppe
Titel der Vorlesung
Dozent
Teilnehmerzahl
Ein Ausschnitt aus der Datei könnte so aussehen:
I2:Java 2:Rump:100
I2:Algorithmen und Datenstrukturen:Totzauer:80
MT2:Mathematik 2:von Coelln:60
MT2:Audio-/Videotechnik:Lemke:50
E2:Mathematik 2:Rabe:70
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 {
List<List<String>> result = new ArrayList<List<String>>();
BufferedReader br = new BufferedReader(new FileReader(filename));
for (String line=br.readLine(); line!=null; line=br.readLine())
result.add(Arrays.asList(line.split(":")));
br.close();
return result;
}
Kapseln Sie eine derartige Datenbasis in einer Klasse Vorlesungsverzeichnis im Paket vorlesung mit den folgenden Methoden:
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.
public List<String> titles()
Liefert eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen.
public Set<String> workaholics()
Liefert die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten.
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.
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.
public List<String> descendingTitles()
Liefert eine nach Teilnehmerzahl absteigend(!) sortierte Liste mit den Titeln aller Vorlesungen.
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
Titel der Vorlesung
Dozent
Teilnehmerzahl
Ein Ausschnitt aus der Datei könnte so aussehen:
I2:Java 2:Rump:100
I2:Algorithmen und Datenstrukturen:Totzauer:80
MT2:Mathematik 2:von Coelln:60
MT2:Audio-/Videotechnik:Lemke:50
E2:Mathematik 2:Rabe:70
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 {
List<List<String>> result = new ArrayList<List<String>>();
BufferedReader br = new BufferedReader(new FileReader(filename));
for (String line=br.readLine(); line!=null; line=br.readLine())
result.add(Arrays.asList(line.split(":")));
br.close();
return result;
}
Kapseln Sie eine derartige Datenbasis in einer Klasse Vorlesungsverzeichnis im Paket vorlesung mit den folgenden Methoden:
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.
public List<String> titles()
Liefert eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen.
public Set<String> workaholics()
Liefert die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten.
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.
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.
public List<String> descendingTitles()
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!

View File

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

View File

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

View File

@ -1,168 +1,167 @@
package de.joethei.hs.java2.praktikum.praktikum4;
import java.io.*;
import java.net.ServerSocket;
import java.util.*;
import java.util.concurrent.*;
public class KlausurenServer {
private ConcurrentMap<String, TreeSet<Integer>> data = new ConcurrentHashMap<>();
private ExecutorService executorService = Executors.newCachedThreadPool();
private ServerSocket serverSocket;
private static Map<String, CommandHandler> commands = new HashMap<>();
static Map<String, CommandHandler> getCommands() {
return commands;
}
private boolean running;
public KlausurenServer(int port) {
load();
commands.put("test", ((writer, args) -> writer.write("Hallo Welt")));
commands.put("delall", (writer, args) -> {
data.clear();
save();
});
commands.put("put", (writer,