我正在编写代码来实现不同的搜索功能来解决Farmer Wolf Goat Cabbage问题。我们给了几个我们的main和FarmerWolfGoatCabbage类实现的类。其中一个类,AbstractSolver包含行
Iterable<AState> moves = s.getPossibleMoves();
for (AState move : moves)
if (!closed.contains(move))
addState(move);
这是我的FarmerWolfGoatCabbage类。我基本上想翻译以下函数
public DepthFirstSolver getPossibleMoves1(){
DepthFirstSolver moves = null;
//use getOpposite() and addIfSafe
FarmerWolfGoatState fwgsParent = new FarmerWolfGoatState();
FarmerWolfGoatState fwgsChild = null;
int hash;
// the farmer's current position before crossing the river
Side farmerCurrent = this.farmer;
if(this.wolf == farmerCurrent){
fwgsChild = new FarmerWolfGoatState(this, this.getOpposite(this.farmer),
this.getOpposite(this.wolf), this.goat, this.cabbage);
hash = fwgsChild.hashCode();
if(addIfSafe(hash))
moves.addState(fwgsChild);
System.out.println("W");
}
if(this.cabbage == farmerCurrent){
fwgsChild = new FarmerWolfGoatState(this, this.getOpposite(this.farmer),
this.wolf, this.goat, this.getOpposite(this.cabbage));
hash = fwgsChild.hashCode();
if(addIfSafe(hash))
moves.addState(fwgsChild);
System.out.println("C");
}
if(this.goat == farmerCurrent){
fwgsChild = new FarmerWolfGoatState(this, this.getOpposite(this.farmer),
this.wolf, this.getOpposite(this.goat), this.cabbage);
hash = fwgsChild.hashCode();
fwgsChild.getPosition();
//
if (fwgsChild == null)
System.out.println("NULL");
if(addIfSafe(hash))
//moves.addState(fwgsChild);
System.out.println("G");
}
return moves;
}
进入类似的函数,但使用Iterable返回类型
public Iterable<AState> getPossibleMoves()
{
}
答案 0 :(得分:1)
Iterable
是一个界面:
http://download.oracle.com/javase/6/docs/api/java/lang/Iterable.html
您的FirstDepthSolver
类需要实现该接口,因为这是您从getPossibleMoves1()
返回的内容。随后这意味着你将不得不实现Iterator
(或者存储你需要在已经提供了一个交互器的java Collection中迭代的任何东西,并返回它)。
我怀疑除了解决手头的问题之外,这项任务还试图让你做什么。
这个问题应该有所帮助:How can I implement the Iterable interface?
答案 1 :(得分:0)
使DepthFirstSolver成为一个包含类,其类型为Collection的成员变量。然后在DepthFirstSolver的构造函数上,将成员变量实例化为某种类型的集合(如您所愿...... ArrayList)。在DepthFirstSolver类上创建一个add方法来调用成员变量add class。在DepthFirstSolver中添加迭代器方法以调用成员变量的迭代器。这样你就不需要改变你的FarmerWolfGoatCabbage,除了在最后调用DepthFirstSolver的迭代器作为返回值。