A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.itheima;

  2. import java.util.LinkedList;

  3. /*
  4. * 需求:  10、一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
  5. * 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
  6. */
  7. public class Test10 {
  8.         public static void main(String[] args) {
  9.                 // 定义两个LinkedList集合,用于表示此岸和彼岸
  10.                 LinkedList<String> ciAn = new LinkedList<String>();
  11.                 LinkedList<String> biAn = new LinkedList<String>();

  12.                 // 初始时,此岸具有cat、dog、fish、person
  13.                 ciAn.add("cat");
  14.                 ciAn.add("dog");
  15.                 ciAn.add("fish");
  16.                 ciAn.add("person");

  17.                 while (true) {
  18.                         // 当此岸没有任何动物,就说明过河成功了,跳出循环
  19.                         if (ciAn.size() == 0) {
  20.                                 break;
  21.                         }
  22.                         // 过河
  23.                         if (ciAn.contains("person")) {// peron在此案的情况
  24.                                 ciAn.remove("person");
  25.                                 String animal = ciAn.removeFirst();
  26.                                 biAn.addLast(animal);
  27.                                 biAn.addLast("person");

  28.                                 boolean flag = isDaJia(ciAn, biAn);
  29.                                 if (flag) {
  30.                                         // 如果打架
  31.                                         biAn.remove("person");
  32.                                         biAn.remove(animal);
  33.                                         ciAn.addLast(animal);
  34.                                         ciAn.addLast("person");
  35.                                 } else {
  36.                                         // 否则
  37.                                         System.out.println("person将" + animal + "带过河");
  38.                                 }

  39.                         } else {// person在彼岸的情况
  40.                                 // person自己先回去
  41.                                 biAn.remove("person");
  42.                                 ciAn.addLast("person");

  43.                                 boolean flag = isDaJia(ciAn, biAn);
  44.                                 if (flag) {
  45.                                         while (true) {
  46.                                                 // 如果打架,就带走一个动物
  47.                                                 String animal = biAn.removeFirst();
  48.                                                 ciAn.add(animal);

  49.                                                 if (isDaJia(ciAn, biAn)) {
  50.                                                         // 如果还是打架,那个动物就回来
  51.                                                         ciAn.remove(animal);
  52.                                                         biAn.addLast(animal);
  53.                                                 } else {
  54.                                                         System.out.println("person将" + animal + "带回来");
  55.                                                         break;
  56.                                                 }
  57.                                         }

  58.                                 } else {
  59.                                         // 不打架
  60.                                         System.out.println("person自己回来");
  61.                                 }
  62.                         }
  63.                 }

  64.                 System.out.println("过河成功!");

  65.         }

  66.         // 判断河两岸是否有"打架"行为
  67.         public static boolean isDaJia(LinkedList<String> ciAn,
  68.                         LinkedList<String> biAn) {
  69.                 if (!ciAn.contains("person")) {
  70.                         if (ciAn.contains("cat")
  71.                                         && (ciAn.contains("fish") || ciAn.contains("dog"))) {
  72.                                 return true;
  73.                         }
  74.                 }

  75.                 if (!biAn.contains("person")) {
  76.                         if (biAn.contains("cat")
  77.                                         && (biAn.contains("fish") || biAn.contains("dog"))) {
  78.                                 return true;
  79.                         }
  80.                 }

  81.                 return false;
  82.         }
  83. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

16 个回复

倒序浏览
2014heima 发表于 2014-10-20 20:53
这是第几天的知识点,我基础测试页有这题,,现还在看IO

集合那块的吧
回复 使用道具 举报
李天富 发表于 2014-10-21 15:24
这问题我觉得,老农作为调解者和操作者,和猫狗鱼一样放入集合中是不是不太合适?因为他们属性是不一样的 ...

嗯,我觉得是考虑问题的思路不同吧,我是站在自己"玩游戏"的角度,比如有调条河,初始时这岸有老农、猫、狗、鱼,然后我用鼠标点击老农和相应的动物上船过河......你可能是站在"老农"的角度想我要带谁过河......而且因为不是主要考察面向对象的设计,所以我都用字符串表示的人和动物。但这样你的代码更精简!:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马