Как добавить объект в мир Grid на основе логического выражения
Я пытаюсь создать программу, которая поместит другой цветочный объект на северо-восток, юг и запад от первоначального местоположения, если эти места пусты, но я не понимаю, как добавить еще один объект в мир. Вот код, который у меня есть
import info.gridworld.actor.Flower;
import info.gridworld.grid.Location;
import java.util.ArrayList;
public class Weed extends Flower{
static boolean N;
static boolean E;
static boolean S;
static boolean W;
static boolean done = true;
static Location n; //new Location(this.getLocation().getRow()-1,this.getLocation().getCol());
static Location e; //= new Location(this.getLocation().getRow(),this.getLocation().getCol()+1);
static Location s; //= new Location(this.getLocation().getRow()+1,this.getLocation().getCol());
static Location w; //= new Location(this.getLocation().getRow(),this.getLocation().getCol()-1);
public void act(){
ArrayList<Location> EL = this.getGrid().getEmptyAdjacentLocations(getLocation());
checkDirection(EL);
}
public void checkDirection(ArrayList<Location> el){
n = new Location(this.getLocation().getRow()-1,this.getLocation().getCol());
e = new Location(this.getLocation().getRow(),this.getLocation().getCol()+1);
s = new Location(this.getLocation().getRow()+1,this.getLocation().getCol());
w = new Location(this.getLocation().getRow(),this.getLocation().getCol()-1);
for(int x=0; x<el.size(); x++){
System.out.println("el"+el.get(x));
if(el.get(x).equals(n)){
N = false;
}
else if(!el.get(x).equals(n)){
N = true;
}
else if(el.get(x).equals(e)){
E = false;
}
else if(!el.get(x).equals(e)){
E = true;
}
else if(el.get(x).equals(s)){
S = false;
}
else if(!el.get(x).equals(s)){
S = true;
}
else if(el.get(x).equals(w)){
W = false;
}
else if(!el.get(x).equals(w)){
W = true;
}
}
if(N==false&&W==false&&E==false&&S==false) done = true;
System.out.println(N);
System.out.println(E);
System.out.println(S);
System.out.println(W);
System.out.println(n);
System.out.println(e);
System.out.println(s);
System.out.println(w);
}
}
import info.gridworld.actor.ActorWorld;
import info.gridworld.actor.Flower;
import info.gridworld.grid.Location;
public class WeedRunner extends Weed {
public static void main(String args[]){
ActorWorld world = new ActorWorld();
Weed we = new Weed();
world.add(new Location (5,4), we);
world.show();
while(done == false){
if(N==false)world.add(new Location(n.getRow(),n.getCol()),we);
if(E==false)world.add(new Location(e.getRow(),e.getCol()),we);
if(S==false)world.add(new Location(s.getRow(),s.getCol()),we);
if(W==false)world.add(new Location(w.getRow(),w.getCol()),we);
}
}
}
1 ответ
el.get(x).equals(n) и!el.get(x).equals(n) являются противоположными логическими выражениями. По крайней мере один из них всегда будет верным. Это означает, что ваш длинный список if-elseif всегда будет останавливаться на одном из них. Я понятия не имею, что вы думаете о том, что делает ваш код, но я могу сказать вам, что значения E, S и W никогда не изменятся от их значений по умолчанию.