Hallo
This commit is contained in:
parent
4863c9d8f0
commit
ec38213982
87
src/Bot/Bot.java
Normal file
87
src/Bot/Bot.java
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package Bot;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
|
||||||
|
public abstract class Bot {
|
||||||
|
|
||||||
|
// Ein Bot ist ein Programm, das sich mit einem Server verbindet und
|
||||||
|
// mit diesem kommuniziert. Der Server sendet dem Bot eine Zeichenkette,
|
||||||
|
// die das Spielfeld repräsentiert. Der Bot sendet dem Server ein Zeichen,
|
||||||
|
// das die nächste Bewegung des Bots repräsentiert.
|
||||||
|
|
||||||
|
|
||||||
|
private final String host; // Hostname oder IP-Adresse des Servers
|
||||||
|
private final int port; // Port des Servers
|
||||||
|
|
||||||
|
protected Bot(String[] args) {
|
||||||
|
host = args.length > 0 ? args[0] : "localhost";
|
||||||
|
port = args.length > 1 ? Integer.parseInt(args[1]) : 63187;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Diese Methode stellt die Verbindung zum Server her und startet die
|
||||||
|
// Kommunikation mit dem Server. Die Methode wird von der main-Methode
|
||||||
|
// aufgerufen.
|
||||||
|
protected void run() {
|
||||||
|
try (Socket socket = new Socket()) {
|
||||||
|
socket.connect(new InetSocketAddress(host, port));
|
||||||
|
OutputStream out = socket.getOutputStream();
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||||
|
View view = new View();
|
||||||
|
while (true) {
|
||||||
|
view.read(in);
|
||||||
|
view.print();
|
||||||
|
try {
|
||||||
|
char ch = nextMove(view);
|
||||||
|
out.write(ch);
|
||||||
|
}
|
||||||
|
catch (Exception e) { break; }
|
||||||
|
}
|
||||||
|
socket.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Diese Methode ermittelt den nächsten Zug des Bots. Sie wird von der
|
||||||
|
// run-Methode aufgerufen, nachdem der Server das Spielfeld gesendet hat.
|
||||||
|
// Subklassen müssen diese Methode implementieren.
|
||||||
|
abstract protected char nextMove(View view) throws Exception;
|
||||||
|
|
||||||
|
// Diese Klasse repräsentiert das Spielfeld. Sie wird von der run-Methode
|
||||||
|
// verwendet, um das Spielfeld zu lesen und auszugeben.
|
||||||
|
// Subklassen können diese Klasse verwenden, um das Spielfeld zu analysieren.
|
||||||
|
public static class View {
|
||||||
|
protected String data;
|
||||||
|
protected int width;
|
||||||
|
|
||||||
|
// Diese Methode liest das Spielfeld vom Server.
|
||||||
|
private void read(BufferedReader in) throws IOException {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
data = in.readLine();
|
||||||
|
if (data == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sb.append(data);
|
||||||
|
width = data.length();
|
||||||
|
for (int i = 1; i < width; ++i) {
|
||||||
|
sb.append(in.readLine());
|
||||||
|
}
|
||||||
|
data = sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Diese Methode gibt das Spielfeld aus.
|
||||||
|
protected void print() {
|
||||||
|
if (data == null || width < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int i = 0, len = data.length(); i < len; i += width) {
|
||||||
|
System.out.println(data.substring(i, i + width));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
90
src/Bot/EscapeBot.java
Normal file
90
src/Bot/EscapeBot.java
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
package Bot;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class EscapeBot extends Bot {
|
||||||
|
|
||||||
|
private boolean rocketFound = false;
|
||||||
|
private int counter=0;
|
||||||
|
|
||||||
|
|
||||||
|
public EscapeBot(String[] args) {
|
||||||
|
super(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected char nextMove(View view) throws IOException {
|
||||||
|
counter++;
|
||||||
|
System.out.println(counter);
|
||||||
|
if (view.data.contains("o")) {
|
||||||
|
System.out.println("rocket found");
|
||||||
|
|
||||||
|
return moveToRocket(view);
|
||||||
|
}else {
|
||||||
|
return findRocket();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Wenn die Rakete nicht gefunden wurde oder bereits gefunden wurde,
|
||||||
|
// mache einen zufälligen Schritt.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private char findRocket(){
|
||||||
|
if(counter==1||counter==6||counter==11||counter==21||counter==31||counter==46||counter==61||counter==81||counter==101||counter==126||counter==151||counter==181||counter==211||counter==246||counter==271){
|
||||||
|
System.out.println("ich dreh mich");
|
||||||
|
|
||||||
|
return '>';
|
||||||
|
|
||||||
|
}
|
||||||
|
System.out.println("ich geh gerade aus");
|
||||||
|
return '^';
|
||||||
|
}
|
||||||
|
private char moveToRocket(View view) {
|
||||||
|
int zeroIndex = view.data.indexOf("o");
|
||||||
|
|
||||||
|
// Berechne die x- und y-Koordinaten der "0" im Sichtfeld
|
||||||
|
int zeroX = zeroIndex % view.width;
|
||||||
|
int zeroY = zeroIndex / view.width;
|
||||||
|
|
||||||
|
// Berechne die x- und y-Koordinaten der aktuellen Position des Bots
|
||||||
|
int botX = view.width / 2;
|
||||||
|
int botY = view.width / 2;
|
||||||
|
System.out.println(zeroX);
|
||||||
|
System.out.println(zeroY);
|
||||||
|
System.out.println(botX);
|
||||||
|
System.out.println(botY);
|
||||||
|
|
||||||
|
if(zeroY<botY){
|
||||||
|
System.out.println("ich suche das ziehl");
|
||||||
|
return '^';
|
||||||
|
|
||||||
|
}else if(zeroY>botY){
|
||||||
|
return'v';
|
||||||
|
}else if(zeroY==botY){
|
||||||
|
if(zeroX<botX){
|
||||||
|
System.out.println("suche:Ich dreh mich nach links ");
|
||||||
|
return '<';
|
||||||
|
}else {
|
||||||
|
System.out.println("ziel:ich dreh mich nach rechts");
|
||||||
|
return '>';
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
return 'q';
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
EscapeBot escapeBot = new EscapeBot(args);
|
||||||
|
escapeBot.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
46
src/Bot/ManualBot.java
Normal file
46
src/Bot/ManualBot.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package Bot;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
|
||||||
|
public class ManualBot extends Bot {
|
||||||
|
|
||||||
|
public ManualBot(String[] args) {
|
||||||
|
super(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected char nextMove(View view) throws IOException {
|
||||||
|
System.out.println(" (w: Forward, s: Backward, a: Left, d: Right, q: Quit): ");
|
||||||
|
Scanner scan= new Scanner(System.in);
|
||||||
|
//BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
// String input = reader.readLine().trim();
|
||||||
|
|
||||||
|
String command = scan.nextLine();
|
||||||
|
|
||||||
|
switch (command) {
|
||||||
|
case "w":
|
||||||
|
return '^';
|
||||||
|
case "s":
|
||||||
|
return 'v';
|
||||||
|
case "a":
|
||||||
|
return '<';
|
||||||
|
case "d":
|
||||||
|
return '>';
|
||||||
|
case "q":
|
||||||
|
System.out.println("Connection terminated by user.");
|
||||||
|
throw new IOException("Connection terminated by user.");
|
||||||
|
default:
|
||||||
|
System.out.println("Invalid command. Try again.");
|
||||||
|
|
||||||
|
}
|
||||||
|
return 'q';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ManualBot manualBot = new ManualBot(args);
|
||||||
|
manualBot.run();
|
||||||
|
}
|
||||||
|
}
|
46
src/Bot/Rumblebot.java
Normal file
46
src/Bot/Rumblebot.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package Bot;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
|
||||||
|
public class Rumblebot extends Bot {
|
||||||
|
|
||||||
|
public Rumblebot(String[] args) {
|
||||||
|
super(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected char nextMove(View view) throws IOException {
|
||||||
|
System.out.println(" (w: Forward, s: Backward, a: Left, d: Right, q: Quit): ");
|
||||||
|
Scanner scan= new Scanner(System.in);
|
||||||
|
//BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
// String input = reader.readLine().trim();
|
||||||
|
|
||||||
|
String command = scan.nextLine();
|
||||||
|
|
||||||
|
switch (command) {
|
||||||
|
case "w":
|
||||||
|
return '^';
|
||||||
|
case "s":
|
||||||
|
return 'v';
|
||||||
|
case "a":
|
||||||
|
return '<';
|
||||||
|
case "d":
|
||||||
|
return '>';
|
||||||
|
case "q":
|
||||||
|
System.out.println("Connection terminated by user.");
|
||||||
|
throw new IOException("Connection terminated by user.");
|
||||||
|
default:
|
||||||
|
System.out.println("Invalid command. Try again.");
|
||||||
|
|
||||||
|
}
|
||||||
|
return 'q';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Rumblebot rumblebot = new Rumblebot(args);
|
||||||
|
rumblebot.run();
|
||||||
|
}
|
||||||
|
}
|
143
src/Bot/SnakeBot.java
Normal file
143
src/Bot/SnakeBot.java
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
package Bot;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
|
||||||
|
public class SnakeBot extends Bot {
|
||||||
|
|
||||||
|
public SnakeBot(String[] args) {
|
||||||
|
super(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
int counter=0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected char nextMove(View view) throws IOException {
|
||||||
|
int wagenIndex = view.data.indexOf("*");
|
||||||
|
|
||||||
|
// Berechne die x- und y-Koordinaten der "0" im Sichtfeld
|
||||||
|
int wagenX = wagenIndex % view.width;
|
||||||
|
int wagenY = wagenIndex / view.width;
|
||||||
|
//Berechen die x- und y-Koordinate der @ im Sichtfeld
|
||||||
|
|
||||||
|
|
||||||
|
// Berechne die x- und y-Koordinaten der aktuellen Position des Bots
|
||||||
|
int botX = view.width / 2;
|
||||||
|
int botY = view.width / 2;
|
||||||
|
|
||||||
|
System.out.println("wagen"+wagenX+" ,"+wagenY);
|
||||||
|
System.out.println("bot"+botX+", "+botY);
|
||||||
|
if((wagenY+1)==botY){
|
||||||
|
System.out.println("ich dreh mich ");
|
||||||
|
return '>';
|
||||||
|
}else {
|
||||||
|
return search(view);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private char search(View view){
|
||||||
|
|
||||||
|
|
||||||
|
if(view.data.contains("@")){
|
||||||
|
return moveToRocket(view);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println("ich laufe");
|
||||||
|
counter++;
|
||||||
|
if(counter>40){
|
||||||
|
counter=0;
|
||||||
|
return '>';
|
||||||
|
}
|
||||||
|
return '^';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private char moveToRocket(View view) {
|
||||||
|
|
||||||
|
int wagenIndex = view.data.indexOf("*");
|
||||||
|
|
||||||
|
// Berechne die x- und y-Koordinaten der "0" im Sichtfeld
|
||||||
|
int wagenX = wagenIndex % view.width;
|
||||||
|
int wagenY = wagenIndex / view.width;
|
||||||
|
|
||||||
|
|
||||||
|
int botX = view.width / 2;
|
||||||
|
int botY = view.width / 2;
|
||||||
|
|
||||||
|
// Finde alle '@'-Symbole im Sichtfeld
|
||||||
|
List<Integer> targetIndices = new ArrayList<>();
|
||||||
|
for (int i = 0; i < view.data.length(); i++) {
|
||||||
|
if (view.data.charAt(i) == '@') {
|
||||||
|
targetIndices.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetIndices.isEmpty()) {
|
||||||
|
// Keine Ziele vorhanden, laufe weiter
|
||||||
|
System.out.println("Ich laufe weiter");
|
||||||
|
return '^';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finde das am nächsten liegende Ziel
|
||||||
|
int nearestTargetIndex = findNearestTarget(botX, botY, targetIndices, view.width);
|
||||||
|
|
||||||
|
// Berechne die x- und y-Koordinaten des nächsten Ziels
|
||||||
|
int targetX = nearestTargetIndex % view.width;
|
||||||
|
int targetY = nearestTargetIndex / view.width;
|
||||||
|
|
||||||
|
// Bewege dich in Richtung des nächsten Ziels
|
||||||
|
if (targetY < botY) {
|
||||||
|
System.out.println("Ich bewege mich nach oben");
|
||||||
|
return '^';
|
||||||
|
} else if (targetY > botY) {
|
||||||
|
if((wagenY+1)==botY){
|
||||||
|
System.out.println("ich dreh mich ");
|
||||||
|
return '>';
|
||||||
|
}else {
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("Ich bewege mich nach unten");
|
||||||
|
return 'v';}
|
||||||
|
} else {
|
||||||
|
if (targetX < botX) {
|
||||||
|
System.out.println("Ich drehe mich nach links");
|
||||||
|
return '<';
|
||||||
|
} else if (targetX > botX) {
|
||||||
|
System.out.println("Ich drehe mich nach rechts");
|
||||||
|
return '>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default-Rückgabewert, sollte nicht erreicht werden
|
||||||
|
return 'q';
|
||||||
|
}
|
||||||
|
|
||||||
|
private int findNearestTarget(int botX, int botY, List<Integer> targetIndices, int width) {
|
||||||
|
int nearestTargetIndex = -1;
|
||||||
|
int minDistance = Integer.MAX_VALUE;
|
||||||
|
|
||||||
|
for (int targetIndex : targetIndices) {
|
||||||
|
int targetX = targetIndex % width;
|
||||||
|
int targetY = targetIndex / width;
|
||||||
|
|
||||||
|
int distance = Math.abs(targetX - botX) + Math.abs(targetY - botY);
|
||||||
|
|
||||||
|
if (distance < minDistance) {
|
||||||
|
minDistance = distance;
|
||||||
|
nearestTargetIndex = targetIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nearestTargetIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SnakeBot snakebot= new SnakeBot(args);
|
||||||
|
snakebot.run();
|
||||||
|
}
|
||||||
|
}
|
8
src/HelloWorld/ErrorWriter.java
Normal file
8
src/HelloWorld/ErrorWriter.java
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package HelloWorld;
|
||||||
|
|
||||||
|
public class ErrorWriter implements IHelloWorldWriter {
|
||||||
|
@Override
|
||||||
|
public void writeHelloWorld(){
|
||||||
|
System.err.println("Hello World");
|
||||||
|
}
|
||||||
|
}
|
24
src/HelloWorld/Executor.java
Normal file
24
src/HelloWorld/Executor.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package HelloWorld;
|
||||||
|
|
||||||
|
public class Executor{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
printwriteHelloWorld(new OutWriter(), new ErrorWriter(), true);
|
||||||
|
printwriteHelloWorld(new OutWriter(), new ErrorWriter(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void printwriteHelloWorld(IHelloWorldWriter writer1, IHelloWorldWriter writer2, boolean second) {
|
||||||
|
|
||||||
|
|
||||||
|
if(second){
|
||||||
|
writer2.writeHelloWorld();
|
||||||
|
}else {
|
||||||
|
writer1.writeHelloWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
9
src/HelloWorld/IHelloWorldWriter.java
Normal file
9
src/HelloWorld/IHelloWorldWriter.java
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package HelloWorld;
|
||||||
|
|
||||||
|
|
||||||
|
public interface IHelloWorldWriter {
|
||||||
|
|
||||||
|
void writeHelloWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
9
src/HelloWorld/OutWriter.java
Normal file
9
src/HelloWorld/OutWriter.java
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package HelloWorld;
|
||||||
|
|
||||||
|
public class OutWriter implements IHelloWorldWriter {
|
||||||
|
@Override
|
||||||
|
public void writeHelloWorld(){
|
||||||
|
System.out.println("Hello Wolrd");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package Praktikum1;
|
package praktikum1;
|
||||||
|
|
||||||
public class Teilerdurch5 {
|
public class Teilerdurch5 {
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package Praktikum1;
|
package praktikum1;
|
||||||
|
|
||||||
import java.util.Scanner;
|
|
||||||
|
|
||||||
public class Zahlenfilter {
|
public class Zahlenfilter {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
0
src/Praktikum4/BetterPhilospher.java
Normal file
0
src/Praktikum4/BetterPhilospher.java
Normal file
45
src/Praktikum4/Fork.java
Normal file
45
src/Praktikum4/Fork.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package Praktikum4;
|
||||||
|
|
||||||
|
public class Fork {
|
||||||
|
|
||||||
|
private boolean inUse=false;
|
||||||
|
private final int id;
|
||||||
|
|
||||||
|
public Fork(int id){
|
||||||
|
this.id=id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId(){
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean take(){
|
||||||
|
try {
|
||||||
|
//kurz warten
|
||||||
|
Thread.sleep(1000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized (this) {
|
||||||
|
if (!inUse) {
|
||||||
|
inUse=true;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
//System.out.println("Keine Gabel frei");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void put(){
|
||||||
|
synchronized (this) {
|
||||||
|
inUse = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInUse() {
|
||||||
|
return inUse;
|
||||||
|
}
|
||||||
|
}
|
59
src/Praktikum4/Philosopher.java
Normal file
59
src/Praktikum4/Philosopher.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package Praktikum4;
|
||||||
|
|
||||||
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
|
class Philosopher implements Runnable{
|
||||||
|
|
||||||
|
protected int id;
|
||||||
|
protected final Fork left;
|
||||||
|
protected final Fork right;
|
||||||
|
|
||||||
|
public Philosopher(int id,Fork left,Fork rigth){
|
||||||
|
this.id=id;
|
||||||
|
this.left=left;
|
||||||
|
this.right=rigth;
|
||||||
|
}
|
||||||
|
private void tryToGetFork(Fork fork, String forkType) {
|
||||||
|
|
||||||
|
System.out.println("Philosopher " + id + " is trying to get " + forkType + " fork " + fork.getId());
|
||||||
|
while (!fork.take()) {
|
||||||
|
Thread.yield(); // Busy wait, um die CPU zu entlasten
|
||||||
|
}
|
||||||
|
System.out.println("Philosopher " + id + " got " + forkType + " fork " + fork.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
Fork firstFork;
|
||||||
|
Fork secondFork;
|
||||||
|
|
||||||
|
if (left.getId() < right.getId()) {
|
||||||
|
firstFork = left;
|
||||||
|
secondFork = right;
|
||||||
|
} else {
|
||||||
|
firstFork = right;
|
||||||
|
secondFork = left;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tryToGetFork(firstFork, "first");
|
||||||
|
|
||||||
|
|
||||||
|
tryToGetFork(secondFork, "second");
|
||||||
|
System.out.println("Philosopher " + id + " is eating");
|
||||||
|
|
||||||
|
|
||||||
|
Thread.sleep(2000);
|
||||||
|
|
||||||
|
|
||||||
|
left.put();
|
||||||
|
right.put();
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("Philosopher " + id + " finished eating");
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
58
src/Praktikum4/SorterClient.java
Normal file
58
src/Praktikum4/SorterClient.java
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package Praktikum4;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class SorterClient {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SorterClient client = new SorterClient();
|
||||||
|
client.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void run() {
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
while (scanner.hasNextLine()) {
|
||||||
|
String line = scanner.nextLine();
|
||||||
|
if (line.isEmpty())
|
||||||
|
break;
|
||||||
|
line = sort(line);
|
||||||
|
System.out.println(line);
|
||||||
|
}
|
||||||
|
scanner.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String SERVER_ADDRESS = "localhost";
|
||||||
|
private static final int SERVER_PORT = 12345;
|
||||||
|
|
||||||
|
private String sort(String line)
|
||||||
|
{
|
||||||
|
|
||||||
|
InetSocketAddress adress = new InetSocketAddress(SERVER_ADDRESS, SERVER_PORT);
|
||||||
|
try ( Socket socket = new Socket()) {
|
||||||
|
socket.connect(adress);
|
||||||
|
sendLine(socket, line);
|
||||||
|
String answer = receiveLine(socket);
|
||||||
|
return answer;
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return "Error: Unable to communicate with the server.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String receiveLine(Socket socket) throws IOException {
|
||||||
|
InputStream in = socket.getInputStream();
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
|
||||||
|
return reader.readLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendLine(Socket socket, String line) throws IOException {
|
||||||
|
OutputStream out = socket.getOutputStream();
|
||||||
|
PrintWriter writer = new PrintWriter(out);
|
||||||
|
writer.println(line);
|
||||||
|
writer.flush();
|
||||||
|
}
|
||||||
|
}
|
80
src/Praktikum4/SorterServer.java
Normal file
80
src/Praktikum4/SorterServer.java
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
package Praktikum4;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class SorterServer implements Runnable {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
final int port = 12345;
|
||||||
|
try (ServerSocket socket = new ServerSocket(port)) {
|
||||||
|
while (true) {
|
||||||
|
Socket client = socket.accept();
|
||||||
|
Thread thread = new Thread(new SorterServer(client));
|
||||||
|
thread.start();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Socket socket;
|
||||||
|
|
||||||
|
private SorterServer(Socket socket) {
|
||||||
|
this.socket = socket;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
String msg = receiveLine(this.socket);
|
||||||
|
String ausgabe=sortAndCount(msg);
|
||||||
|
sendLine(socket,ausgabe );
|
||||||
|
}
|
||||||
|
catch (Exception e) {};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String receiveLine(Socket socket) throws IOException {
|
||||||
|
InputStream in = socket.getInputStream();
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
|
||||||
|
return reader.readLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendLine(Socket socket, String line) throws IOException {
|
||||||
|
OutputStream out = socket.getOutputStream();
|
||||||
|
PrintWriter writer = new PrintWriter(out);
|
||||||
|
writer.println(line);
|
||||||
|
writer.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String sortAndCount(String input) {
|
||||||
|
|
||||||
|
Map<Character, Integer> charCountMap = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
for (char c : input.toCharArray()) {
|
||||||
|
charCountMap.put(c, charCountMap.getOrDefault(c, 0) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
StringBuilder sortedString = new StringBuilder();
|
||||||
|
|
||||||
|
|
||||||
|
for (char c = 'a'; c <= 'z'; c++) {
|
||||||
|
|
||||||
|
if (charCountMap.containsKey(c)) {
|
||||||
|
int count = charCountMap.get(c);
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
sortedString.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rückgabe der sortierten Zeichenkette
|
||||||
|
return sortedString.toString();
|
||||||
|
}
|
||||||
|
}
|
11
src/Praktikum4/Table.java
Normal file
11
src/Praktikum4/Table.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package Praktikum4;
|
||||||
|
|
||||||
|
public class Table {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Fork[] forks = { new Fork(0), new Fork(1), new Fork(2),
|
||||||
|
new Fork(3), new Fork(4)}; Philosopher[] philosophers = {
|
||||||
|
new Philosopher(0, forks[0], forks[1]), new Philosopher(1, forks[1], forks[2]), new Philosopher(2, forks[2], forks[3]), new Philosopher(3, forks[3], forks[4]), new Philosopher(4, forks[4], forks[0])
|
||||||
|
};
|
||||||
|
for (Philosopher philosopher : philosophers) { Thread t = new Thread(philosopher); t.start();
|
||||||
|
} }
|
||||||
|
}
|
@ -1,2 +0,0 @@
|
|||||||
public class test {
|
|
||||||
}
|
|
33
test/HelloWorld/ExecutorTest.java
Normal file
33
test/HelloWorld/ExecutorTest.java
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*package HelloWorld;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
|
||||||
|
class ExecutorTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void printwriteHelloWorld() {
|
||||||
|
|
||||||
|
|
||||||
|
//Mock-Objekte werden erzeugt
|
||||||
|
IHelloWorldWriter outMock =mock(OutWriter.class);
|
||||||
|
IHelloWorldWriter errMock =mock(OutWriter.class);
|
||||||
|
|
||||||
|
Executor.printwriteHelloWorld(outMock,errMock,true);
|
||||||
|
|
||||||
|
verify(outMock,times(1)).writeHelloWorld();
|
||||||
|
verify(errMock,times(0)).writeHelloWorld();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//writeHelloWorld wird einmal für outMock aufgerufen und keinmal für errMock, weil second auf false gesetzt wurde
|
||||||
|
|
||||||
|
// Mock -Objekte ermöglichen, Verhalten von Abhängigkeiten zu testen. Bei unserem Fall können wir nun die Methode aufrufen ohen das tatsächlich was geprintet wurde
|
||||||
|
|
||||||
|
// Bei fehlerhaftem Verhalten würde der Test fehlschlagen -- Die Methode hat also nicht die erwarteten Aufrufe
|
||||||
|
|
||||||
|
*/
|
33
test/Praktikum4/ForkTest.java
Normal file
33
test/Praktikum4/ForkTest.java
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package Praktikum4;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class ForkTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getId() {
|
||||||
|
Fork fork = new Fork(1);
|
||||||
|
assertEquals(1, fork.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void take() {
|
||||||
|
Fork fork = new Fork(2);
|
||||||
|
assertTrue(fork.take());// sollte nicht in Gebrauch sein
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void put() {
|
||||||
|
Fork fork = new Fork(3);
|
||||||
|
fork.put();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
37
test/praktikum1/TriangleCheckerTest.java
Normal file
37
test/praktikum1/TriangleCheckerTest.java
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package praktikum1;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class TriangleCheckerTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void checkEquilateralTriangle() {
|
||||||
|
//Gleichseitig
|
||||||
|
assertEquals(TriangleChecker.TriangleType.EQUILATERAL,TriangleChecker.checkTriangle(5,5,5));
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
void checkIsoscelesTriangle(){
|
||||||
|
//Gleichschenklich
|
||||||
|
assertEquals(TriangleChecker.TriangleType.ISOSCELES, TriangleChecker.checkTriangle(5,5,3));
|
||||||
|
assertEquals(TriangleChecker.TriangleType.ISOSCELES, TriangleChecker.checkTriangle(3,5,5));
|
||||||
|
assertEquals(TriangleChecker.TriangleType.ISOSCELES, TriangleChecker.checkTriangle(5,3,5));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void checkNormalTrianlge(){
|
||||||
|
assertEquals(TriangleChecker.TriangleType.NORMAL,TriangleChecker.checkTriangle(3,5,7));
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
void chechNoneTrianlge(){
|
||||||
|
assertEquals(TriangleChecker.TriangleType.NONE,TriangleChecker.checkTriangle(100,10,1));
|
||||||
|
assertEquals(TriangleChecker.TriangleType.NONE,TriangleChecker.checkTriangle(10,100,1));
|
||||||
|
assertEquals(TriangleChecker.TriangleType.NONE,TriangleChecker.checkTriangle(1,10,100));
|
||||||
|
assertEquals(TriangleChecker.TriangleType.NONE,TriangleChecker.checkTriangle(-2,2,3));
|
||||||
|
assertEquals(TriangleChecker.TriangleType.NONE,TriangleChecker.checkTriangle(2,-2,3));
|
||||||
|
assertEquals(TriangleChecker.TriangleType.NONE,TriangleChecker.checkTriangle(2,2,-3));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
32
test/praktikum1/ZahlenfilterTest.java
Normal file
32
test/praktikum1/ZahlenfilterTest.java
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package praktikum1;
|
||||||
|
|
||||||
|
import com.sun.org.apache.xpath.internal.objects.XNumber;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class ZahlenfilterTest {
|
||||||
|
|
||||||
|
@org.junit.jupiter.api.Test
|
||||||
|
void istdurch5teilbar() {
|
||||||
|
|
||||||
|
assertFalse(Zahlenfilter.istdurch5teilbar(12));
|
||||||
|
assertTrue(Zahlenfilter.istdurch5teilbar(10));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.junit.jupiter.api.Test
|
||||||
|
void auf9endet() {
|
||||||
|
assertTrue(Zahlenfilter.auf9endet(89));
|
||||||
|
assertFalse(Zahlenfilter.auf9endet(65));
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.junit.jupiter.api.Test
|
||||||
|
void addiertunddurch3() {
|
||||||
|
assertTrue(Zahlenfilter.addiertunddurch3(9,6));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user