帮我用java编程解决,谢谢了。谁会的,我在学习java,教下我

一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫... 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。 展开
 我来答
飞雪A1A2
2013-12-11 · TA获得超过213个赞
知道小有建树答主
回答量:191
采纳率:0%
帮助的人:156万
展开全部
//这个是别人写的 我给稍微做了一下改动 你可以参考一下。
import java.util.Iterator;
import java.util.LinkedList;

public class AcrossTheRiver {
// 定义三个String对象
public static final String CatName = "Cat";   // 猫'Cat'
public static final String DogName = "Dag";   // 狗'Dog'
public static final String FishName = "Fish"; //鱼 'Fish'

// 判断两个货物之间关系是否友好 写的麻烦了一点= =..
public static boolean isFriendly(Goods goods1, Goods goods2) {
if (goods1 != null) {
if (goods1.getGoodsName().trim().equals(CatName)) {
if (goods2 == null) {
return true;
} else {
return false;
}
} else if (goods1.getGoodsName().trim().equals(DogName)) {
if (goods2 == null
|| goods2.getGoodsName().trim().equals(FishName)) {
return true;
} else {
return false;
}
} else if (goods1.getGoodsName().trim().equals(FishName)) {
if (goods2 == null
|| goods2.getGoodsName().trim().equals(DogName)) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return true;
}
}

// 我就直接写在主方法里了
public static void main(String[] args) {
boolean isSuccess = false;
LinkedList<Goods> beforeCrossing = new LinkedList<Goods>();
LinkedList<Goods> afterCrossing = new LinkedList<Goods>();
beforeCrossing.add(new Goods(CatName));
beforeCrossing.add(new Goods(FishName));
beforeCrossing.add(new Goods(DogName));
while (!isSuccess) {
Goods goods1 = beforeCrossing.getFirst();
System.out.println(goods1.getGoodsName() + " 过河");
beforeCrossing.removeFirst();
if (beforeCrossing.isEmpty()) {
afterCrossing.addLast(goods1);
isSuccess = true;
System.out.println("全部移动完毕!");
} else {
Iterator<Goods> it = beforeCrossing.iterator();
Goods[] beforeCro = new Goods[2];
for (int i = 0; it.hasNext(); i++) {
beforeCro[i] = it.next();
System.out.println(beforeCro[i].getGoodsName() + " 留了下来");
}
if (isFriendly(beforeCro[0], beforeCro[1])) {
if (afterCrossing.isEmpty()) {
afterCrossing.addLast(goods1);
System.out
.println(goods1.getGoodsName() + " 被成功的放到了对岸");
} else {
Goods goods2 = afterCrossing.getFirst();
if (isFriendly(goods1, goods2)) {
afterCrossing.addLast(goods1);
System.out.println(goods1.getGoodsName()
+ " 被成功的放到了对岸");
} else {
beforeCrossing.addLast(goods2);
afterCrossing.removeFirst();
System.out.println(goods1.getGoodsName() + " 与 "
+ goods2.getGoodsName() + "并不和睦 于是把 "
+ goods2.getGoodsName() + "带了回来 并将 "
+ goods1.getGoodsName() + " 留了下来");
}
}
} else {
beforeCrossing.addLast(goods1);
System.out.println("很可惜 留下来的两个东西并不和睦 于是 "
+ goods1.getGoodsName() + " 又被放了回去");
}
}
}
}
}

    // 货物类
class Goods {
// 货物名称
private String goodsName;
// 默认构造方法
public Goods(String goodsName) {
this.goodsName = goodsName;
}

// 获得货物名称
public String getGoodsName() {
return goodsName;
}

}
herox_hu
2013-12-11 · TA获得超过776个赞
知道小有建树答主
回答量:1122
采纳率:0%
帮助的人:321万
展开全部
  1. 先将猫拿过去

  2. 将鱼(狗)拿过去,不过要带着猫回来

  3. 放下猫,再带着狗(鱼)过去

  4. 最后带着猫过去

    结束。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
彩蝶飞香
2013-12-11 · TA获得超过416个赞
知道答主
回答量:133
采纳率:0%
帮助的人:52.1万
展开全部
看看java递归经典代码汉诺塔,你自然就会了。把A=狗,B=猫,C=鱼
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
运行异常
2013-12-11
知道答主
回答量:29
采纳率:0%
帮助的人:10.5万
展开全部
思路,狗没和鱼过不去,接下来你自己都知道怎么答了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式