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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 想飞的鱼 于 2014-6-9 09:27 编辑

这是我的源码,求指导。希望加上IO,做成控制台版的小游戏~
  1. //package com.itheima;
  2. /**
  3. 第10题:一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
  4. 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。

  5. @author Mr.Hou

  6. 思路:
  7. 1,观察问题经分析,可用两个集合代表河的左岸和右岸
  8. 2,将人、狗、猫、鱼的对象存入集合中,姑且用字符串对象代表,就不描述类了
  9. 3,初始化时的河左岸是有人、狗、猫、鱼
  10. 4,开始渡河,如果左岸不是空,就循环移动人和动物
  11. 5,判断人在左岸还是右岸,各有不同的移动方式
  12. 6,判断是否“打架”,如果打架就返回来,带下一个动物 用get(0)实现,因为如果打架,
  13. 返回来的动物就添加到了集合的末尾
  14. 7,直到渡河成功
  15. */
  16. import java.util.*;
  17. class Test10
  18. {
  19.         ArrayList<String> left = null;//创建一个集合代表左岸
  20.         ArrayList<String> right = null;//右岸
  21.         Test10()
  22.         {
  23.                 /*
  24.                 一初始化就有了左岸,右岸,
  25.                 所有的动物和人开始都在左岸
  26.                 */
  27.                 left = new ArrayList<String>();
  28.                 right = new ArrayList<String>();
  29.                 left.add("person");
  30.                 left.add("dog");
  31.                 left.add("cat");
  32.                 left.add("fish");
  33.         }
  34.         

  35.         public static void main(String [] args)
  36.         {
  37.                 new Test10().duHe();
  38.         }
  39.         public void duHe()
  40.         {
  41.                 while (!left.isEmpty())//如果左岸空了,则渡河成功,循环结束
  42.                 {
  43.                         if (left.contains("person"))//判断人在哪岸,在左岸就带一个动物过去
  44.                         {
  45.                                 left.remove("person");
  46.                                 String animal = left.get(0);//获取一个动物
  47.                                 left.remove(animal);

  48.                                 right.add("person");//表示移动到右岸
  49.                                 right.add(animal);
  50.                                 if (this.daJia())//如果打架,则在返回来,添加到了left集合的末尾
  51.                                 {
  52.                                         right.remove("person");
  53.                                         right.remove(animal);
  54.                                         left.add("person");
  55.                                         left.add(animal);
  56.                                 }
  57.                                 else
  58.                                 {
  59.                                         System.out.println("person 把 "+animal+" 带到了右岸");//如果不打架就成功过河一次
  60.                                 }
  61.                         }
  62.                         else//人在右岸的情况
  63.                         {
  64.                                 right.remove("person");
  65.                                 left.add("person");
  66.                                 if (this.daJia())//如果只移动人,发生“打架”,就再移动一个动物返回左岸
  67.                                 {
  68.                                         while (this.daJia())
  69.                                         {
  70.                                                 String animal = right.get(0);
  71.                                                 right.remove(animal);
  72.                                                 left.add(animal);
  73.                                                 if (this.daJia())//如果移动的某个动物还是反生打架,就把此动物返回右岸,移动其他动物,while实现
  74.                                                 {
  75.                                                         left.remove(animal);
  76.                                                         right.add(animal);
  77.                                                 }
  78.                                                else
  79.                                                {
  80.                                                        System.out.println("person 和 "+animal+" 返回左岸");
  81.                                                 }
  82.                                         }
  83.                                 }
  84.                                 else
  85.                                 {
  86.                                         System.out.println("person 自己返回左岸");
  87.                                 }
  88.                         }
  89.                 }
  90.                 System.out.println("渡河成功!!!!");
  91.         }
  92.         public boolean daJia()
  93.         {
  94.                 /*
  95.                 判断左岸和右岸是否发生打架,
  96.                 */
  97.                 //如果人不在左岸,左岸还包含dog和cat则打架,以下同理
  98.                 if ((!left.contains("person")) && left.contains("dog") && left.contains("cat"))
  99.                         return true;
  100.                 if ((!left.contains("person")) && left.contains("cat") && left.contains("fish"))
  101.                         return true;
  102.                 if ((!right.contains("person")) && right.contains("dog") && right.contains("cat"))
  103.                         return true;
  104.                 if ((!right.contains("person")) && right.contains("cat") && right.contains("fish"))
  105.                         return true;

  106.                 return false;
  107.         }
  108. }
复制代码




评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

3 个回复

正序浏览
dimost 来自手机 中级黑马 2014-12-25 23:12:39
板凳
学习了 学习了  
回复 使用道具 举报
学习了,好好的看看:)
回复 使用道具 举报
高人!!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马