Hey, ich habe eine Liste gegeben, in der ich mehrere Methodenaufrufe (hier Commands genannt) gespeichert habe.
[CODE lang="java" title="Lambda Expression"]//Hier wird eine Klasse Robot generiert. In der Klasse ist eine Liste, die die Commands
//enthält und in dieser Liste werden Methoden, die in der Klasse Robot implementiert
//sind, beschrieben.
public static void main(String[] args) {
Robot test = new Robot("Pengu", Math.toRadians(90), 1);
test.setProgram(robot -> {
List<Command> commands = new ArrayList<>();
commands.add(r -> r.go(0.1));
commands.add(r -> r.go(0.2));
return commands;
});
}[/CODE]
In der Klasse Robot habe ich nun eine Methode, die die Commands in der Liste, die todo heißt, ausführt.
[CODE lang="java" title="Klasse Robot"]public class Robot implements Command{
private List<Command> todo = new LinkedList<>();
/*...*/
//die Befehle aus der Liste werden ausgeführt
public void act(){
while(todo.peek() != null){
if(todo.execute(this).execute(this) == false) {
break;
}
}
}
/// Pre-programmed Commands
public boolean go(double distance) {
//step can be negative if the penguin walks backwards
double sign = Math.signum(distance);
distance = Math.abs(distance);
//penguin walks, each step being 0.2m
while (distance > 0) {
position.moveBy(sign * Math.min(distance, 0.2), direction);
world.resolveCollision(this, position);
distance -= 0.2;
}
System.out.println("go in robot executed!");
return true;
}
@Override
public boolean execute(Robot robot) {
//hier muss ich execute implementieren, sodass das gespeicherte Befehl go aus der
//Liste todo entfernt wird und auf robot ausgeführt wird.
return false;
}
}[/CODE]
Nun wäre meine Frage, ob ihr Vorschläge habt, wie ich execute(Robot robot) implementieren könnte.
[CODE lang="java" title="Lambda Expression"]//Hier wird eine Klasse Robot generiert. In der Klasse ist eine Liste, die die Commands
//enthält und in dieser Liste werden Methoden, die in der Klasse Robot implementiert
//sind, beschrieben.
public static void main(String[] args) {
Robot test = new Robot("Pengu", Math.toRadians(90), 1);
test.setProgram(robot -> {
List<Command> commands = new ArrayList<>();
commands.add(r -> r.go(0.1));
commands.add(r -> r.go(0.2));
return commands;
});
}[/CODE]
In der Klasse Robot habe ich nun eine Methode, die die Commands in der Liste, die todo heißt, ausführt.
[CODE lang="java" title="Klasse Robot"]public class Robot implements Command{
private List<Command> todo = new LinkedList<>();
/*...*/
//die Befehle aus der Liste werden ausgeführt
public void act(){
while(todo.peek() != null){
if(todo.execute(this).execute(this) == false) {
break;
}
}
}
/// Pre-programmed Commands
public boolean go(double distance) {
//step can be negative if the penguin walks backwards
double sign = Math.signum(distance);
distance = Math.abs(distance);
//penguin walks, each step being 0.2m
while (distance > 0) {
position.moveBy(sign * Math.min(distance, 0.2), direction);
world.resolveCollision(this, position);
distance -= 0.2;
}
System.out.println("go in robot executed!");
return true;
}
@Override
public boolean execute(Robot robot) {
//hier muss ich execute implementieren, sodass das gespeicherte Befehl go aus der
//Liste todo entfernt wird und auf robot ausgeführt wird.
return false;
}
}[/CODE]
Nun wäre meine Frage, ob ihr Vorschläge habt, wie ich execute(Robot robot) implementieren könnte.
Zuletzt bearbeitet: