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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 止询初衷   /  2014-8-4 22:16  /  3156 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Ron 中级黑马 2014-8-6 21:37:18
21#

这个看得懂,不错
回复 使用道具 举报
善于动脑的孩纸才是好孩纸;P
回复 使用道具 举报
  1. public class Test10 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {

  6.                 // 首先创建3个集合分别代表河岸左边和河岸右边还有船
  7.                 ArrayList<String> left = new ArrayList<String>();
  8.                 ArrayList<String> right = new ArrayList<String>();
  9.                 ArrayList<String> boat = new ArrayList<String>();
  10.                 // 开始所有动物和人都在左岸
  11.                 left.add("person");
  12.                 left.add("cat");
  13.                 left.add("dog");
  14.                 left.add("fish");

  15.                 while (left.size() > 0) {
  16.                         // 判断左岸是否有老农,有的话老农上船
  17.                         if (left.contains("person")) {

  18.                                 left.remove("person");
  19.                                 boat.add("person");
  20.                                 System.out.println("老农上船");
  21.                         }
  22.                         Random r = new Random();
  23.                         // 随机带一只动物上船
  24.                         int num = r.nextInt(left.size());
  25.                         boat.add(left.get(num));
  26.                         String animal = left.remove(num);
  27.                         System.out.println(animal + "上船了");
  28.                         boat.remove(animal);
  29.                         right.add(animal);
  30.                         System.out.println(animal + "到达右岸");
  31.                         if (right.size() >= 2) {// 如果右岸有两只或者两只以上的动物进入该if语句
  32.                                 if (left.size() != 0) {// 如果此时左岸已经没有动物了,则不需要判断是否安全了,因为老农会和最后一只动物一起上岸
  33.                                         if (!isSafe(right)) {// 判断是否安全,如果不安全,进入该if代码块
  34.                                                 num = r.nextInt(right.size());// 随机从右岸带走一只动物
  35.                                                 System.out.println("将" + right.get(num) + "带回左岸");
  36.                                                 String backAnimal = right.remove(num);
  37.                                                 boat.add(backAnimal);
  38.                                                 System.out.println(backAnimal + "上船了");
  39.                                                 boat.remove(backAnimal);
  40.                                                 left.add(backAnimal);
  41.                                                 System.out.println(backAnimal + "回到左岸");
  42.                                         }
  43.                                 } else {// 左岸已经没有动物,还有一只动物和一个人在船上
  44.                                         for (int i = 0; i < boat.size(); i++) {
  45.                                                 right.add(boat.get(i));
  46.                                                 // String rightAnimal=boat.remove(i);
  47.                                                 System.out.println(boat.get(i) + "到达右岸");
  48.                                         }
  49.                                 }
  50.                         }
  51.                 }       
  52.                
  53.                         System.out.println("此时右岸有");
  54.                         for (int i = 0; i < right.size(); i++) {
  55.                                 System.out.print( right.get(i)+"\t");
  56.                         }
  57.                         System.out.println("过河成功!");
  58.         }

  59.         /**
  60.          * 判断是否和谐的方法
  61.          */
  62.         public static boolean isSafe(ArrayList<String> list) {
  63.                 boolean isSafe = true;
  64.                 // 分析知道几个动物之间只要有猫存在就不和谐
  65.                 if (list.contains("cat") && list.size() >= 2) {
  66.                         if (!list.contains("person")) {
  67.                                 isSafe = false;
  68.                         }
  69.                 }
  70.                 return isSafe;

  71.         }

  72. }
复制代码
回复 使用道具 举报
不过去可以不
回复 使用道具 举报
首先把猫带过去,然后回来带狗,然后过去后把猫在带回来,然后带鱼过去,然后回来带猫
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马