Compare commits

...

5 Commits

Author SHA1 Message Date
5f15f03d92 small change 2024-09-14 17:41:40 +00:00
9908656813 finished uebung10 2024-06-18 13:17:01 +00:00
b439030fee Ich hasse Minas 2024-06-18 12:55:21 +00:00
7fea13b9b3 MINAS??? 2024-06-17 22:33:20 +02:00
639da57def MINAS 2024-06-17 22:33:01 +02:00
45 changed files with 260 additions and 209 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/uebung10/logo/Go.class Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,46 +0,0 @@
package uebung07.quantities.plain;
import static uebung07.quantities.plain.LengthUnit.METER;
import static uebung07.quantities.plain.TimeUnit.SECOND;
import static uebung07.quantities.plain.VelocityUnit.METER_PER_SECOND;
public class Length extends Quantity {
private final LengthUnit unit;
public Length(double value, LengthUnit unit) {
super(value, unit);
this.unit = unit;
}
public Length plus(Length other) {
return new Length(value + other.getBaseValue() / unit.baseFactor, unit);
}
public Length minus(Length other) {
return new Length(value - other.getBaseValue() / unit.baseFactor, unit);
}
public Length mult(double f) {
return new Length(value * f, unit);
}
public Length div(double f) {
return new Length(value / f, unit);
}
public Length to(LengthUnit unit) {
return new Length(getBaseValue() / unit.baseFactor, unit);
}
public double div(Length other) {
return getBaseValue() / other.getBaseValue();
}
public Velocity div(Time t) {
return new Velocity(this.value(METER) / t.value(SECOND), METER_PER_SECOND);
}
public Time div(Velocity v) {
return new Time(this.value(METER) / v.value(METER_PER_SECOND), SECOND);
}
}

View File

@@ -1,14 +0,0 @@
package uebung07.quantities.plain;
public class LengthUnit extends Unit {
public LengthUnit(String name, double baseFactor) {
super(name, baseFactor);
}
public static final LengthUnit METER = new LengthUnit("m", 1);
public static final LengthUnit MILLIMETER = new LengthUnit("mm", 0.001);
public static final LengthUnit KILOMETER = new LengthUnit("km", 1000);
public static final LengthUnit MILE = new LengthUnit("mi", 1609.344);
public static final LengthUnit LIGHTYEAR = new LengthUnit("ly", 9460730472580800.0);
public static final LengthUnit PARSEC = new LengthUnit("pc", 3.0856776e16);
}

View File

@@ -1,60 +0,0 @@
package uebung07.quantities.plain;
import static uebung07.quantities.plain.LengthUnit.KILOMETER;
import static uebung07.quantities.plain.LengthUnit.MILE;
import static uebung07.quantities.plain.LengthUnit.MILLIMETER;
import static uebung07.quantities.plain.LengthUnit.PARSEC;
import static uebung07.quantities.plain.TimeUnit.HOUR;
import static uebung07.quantities.plain.TimeUnit.MINUTE;
import static uebung07.quantities.plain.TimeUnit.SECOND;
import static uebung07.quantities.plain.VelocityUnit.KMH;
import static uebung07.quantities.plain.VelocityUnit.METER_PER_SECOND;
import static uebung07.quantities.plain.VelocityUnit.MPH;
public class PlainQuantitiesDemo {
public static void main(String[] args) {
final Length l1 = new Length(1, KILOMETER);
final Length l2 = new Length(1200, MILLIMETER);
final Length l3 = new Length(1, MILE);
System.out.println(l1);
System.out.println(l2);
System.out.println(l1 + " + " + l2 + " = " + l1.plus(l2));
System.out.println(l1 + " + " + l2 + " (in mm) = " + l1.plus(l2).to(MILLIMETER));
System.out.println(l3 + " / " + l1 + " = " + l3.div(l1));
final Time t1 = new Time(100, SECOND);
final Time t2 = new Time(5, HOUR);
System.out.println(t1);
System.out.println(t2);
System.out.println(t1.plus(t2));
System.out.println(t1.plus(t2).to(MINUTE));
final Velocity v1 = new Velocity(12, KMH);
final Velocity v2 = new Velocity(100, METER_PER_SECOND);
System.out.println(v1);
System.out.println(v2);
System.out.println(v2.to(KMH));
System.out.println(v1.plus(v2));
final Length l4 = new Length(300, KILOMETER).to(PARSEC);
final Time t3 = new Time(2, HOUR);
final Velocity v3 = l4.div(t3);
System.out.println(l4 + " / " + l3 + " = " + v3);
System.out.println(v1 + " * " + t1 + " = " + v1.mult(t1).to(KILOMETER));
final Length l5 = v3.mult(t1.to(HOUR));
System.out.println(v3 + " * " + t1 + " = " + l5);
final Time t5 = l4.div(v2);
System.out.println(l4 + " / " + v2 + " = " + t5.to(MINUTE));
Velocity v5 = new Velocity(55, MPH);
System.out.println(v5 + " = " + v5.format("%4.1f %s", KMH));
System.out.println((v5.mult(new Time(30, MINUTE)).to(MILE)));
}
}

View File

@@ -1,28 +0,0 @@
package uebung07.quantities.plain;
public abstract class Quantity {
public final double value;
public final Unit unit;
protected Quantity(double value, Unit unit) {
this.value = value;
this.unit = unit;
}
public double getBaseValue() {
return value * unit.baseFactor;
}
public double value(Unit unit) {
return getBaseValue() / unit.baseFactor;
}
@Override
public String toString() {
return value + " " + unit;
}
public String format(String fmt, Unit unit) {
return String.format(fmt, value(unit), unit);
}
}

View File

@@ -1,41 +0,0 @@
package uebung07.quantities.plain;
import static uebung07.quantities.plain.LengthUnit.METER;
public class Time extends Quantity{
private final TimeUnit unit;
public Time(double value, TimeUnit unit) {
super(value, unit);
this.unit = unit;
}
public Time plus(Time other) {
return new Time( value + other.getBaseValue() / unit.baseFactor, unit);
}
public Time minus(Time other) {
return new Time( value - other.getBaseValue() / unit.baseFactor, unit);
}
public Time mult(double f) {
return new Time( value * f, unit);
}
public Time div(double f) {
return new Time( value / f, unit);
}
public Time to(TimeUnit unit) {
return new Time(getBaseValue() / unit.baseFactor, unit)
}
public double div(Time other) {
return getBaseValue() / other.getBaseValue();
}
public Length mult(Velocity v) {
return new Length(this.value(METER), METER);
}
}

View File

@@ -1,16 +0,0 @@
package uebung07.quantities.plain;
public abstract class Unit {
public final String name;
public final double baseFactor;
public Unit(String name, double baseFactor) {
this.name = name;
this.baseFactor = baseFactor;
}
@Override
public String toString() {
return name;
}
}

View File

@@ -0,0 +1,11 @@
package uebung10.logo;
public class BlackForest implements DarkForest{
@Override
public void breadCrumb(double x, double y) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'breadCrumb'");
}
}

View File

@@ -1,4 +1,4 @@
package logo;
package uebung10.logo;
public interface DarkForest {
void breadCrumb(double x, double y);

View File

@@ -1,4 +1,4 @@
package logo;
package uebung10.logo;
public class Demo {
public static void main(String[] args) {

18
src/uebung10/logo/Go.java Normal file
View File

@@ -0,0 +1,18 @@
package uebung10.logo;
public class Go implements Stmt{
public final double dist;
public Go(double dist) {
if (dist < 0) {
throw new IllegalArgumentException();
}
this.dist = dist;
}
@Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
}

View File

@@ -1,4 +1,4 @@
package logo;
package uebung10.logo;
import javax.swing.JFrame;
import javax.swing.JPanel;

View File

@@ -0,0 +1,30 @@
package uebung10.logo;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
public class HanselGretelTest {
public static final double EPS = 1e-10;
public static final Stmt PROG = new Sequence(new PenDown(), new Go(50),
new Turn(120), new Go(50),
new Turn(120), new Go(50));
private Turtle turtle;
@Before
public void setup() {
turtle = new Turtle(2, 1, 0);
}
@Test
public void TestTriangle() {
final Visitor<Void> visitor = new HanselGretelVisitor(10, turtle, new BlackForest()); //final ist egal
PROG.accept(visitor);
assertEquals(2, turtle.getX(), EPS);
assertEquals(1, turtle.getY(), EPS);
}
}

View File

@@ -0,0 +1,131 @@
package uebung10.logo;
public class HanselGretelVisitor implements Visitor<Void> {
private double gap;
private double s;
private Turtle turtle;
private DarkForest forest;
private State state;
public HanselGretelVisitor(double s, Turtle turtle, DarkForest forest) {
this.s = s;
this.turtle = turtle;
this.forest = forest;
}
@Override
public Void visit(PenUp penUp) {
up();
return null;
}
@Override
public Void visit(PenDown penDown) {
down();
return null;
}
@Override
public Void visit(Turn turn) {
turtle.turn(turn.angle);
return null;
}
@Override
public Void visit(Sequence sequence) {
for(Stmt elem :sequence.seq) {
elem.accept(this);
}
return null;
}
@Override
public Void visit(Go go) {
go(go.dist);
return null;
}
private void breadCrumb() {
forest.breadCrumb(turtle.getX(), turtle.getY());
}
private void layTrail(double d) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'layTrail'");
}
private abstract class State {
abstract void go(double dist);
abstract void up();
abstract void down();
}
private final State longUpState = new State(){
@Override
void go(double d) {turtle.go(d);}
@Override
void down(){
breadCrumb();
state = downState;
}
@Override
void up() {}
};
private final State downState = new State(){
@Override
void go(double d){
layTrail(d);
}
@Override
void up(){state = shortUpState;}
@Override
void down() {}
};
private final State shortUpState = new State() {
@Override
void go(double dist) {
turtle.go(dist);
gap = gap + dist;
if (gap < s) {
} else {
gap = 0;
state = longUpState;
}
}
@Override
void up() {}
@Override
void down() {
state = downState;
}
};
private void go(double d) {
state.go(d);
}
private void down() {
state.down();
}
private void up() {
state.up();
}
}

View File

@@ -0,0 +1,9 @@
package uebung10.logo;
public class PenDown implements Stmt{
@Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
}

View File

@@ -0,0 +1,9 @@
package uebung10.logo;
public class PenUp implements Stmt {
@Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
}

View File

@@ -0,0 +1,15 @@
package uebung10.logo;
public class Sequence implements Stmt {
public final Stmt[] seq;
public Sequence(Stmt... seq) {
this.seq = seq.clone();
}
@Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
}

View File

@@ -0,0 +1,7 @@
package uebung10.logo;
public interface Stmt {
public <T> T accept(Visitor<T> visitor);
}

View File

@@ -0,0 +1,15 @@
package uebung10.logo;
public class Turn implements Stmt{
public final double angle;
public Turn(double angle) {
this.angle = angle;
}
@Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
}

View File

@@ -1,4 +1,4 @@
package logo;
package uebung10.logo;
public class Turtle {
private double x;

View File

@@ -0,0 +1,11 @@
package uebung10.logo;
public interface Visitor<T> {
T visit(PenUp penUp);
T visit(PenDown penDown);
T visit(Turn turn);
T visit(Sequence sequence);
T visit(Go go);
}