黑马程序员技术交流社区

标题: 关于农夫过河问题,老夫考虑了一天时间,只为纯程序判断,代码如下,忘指点! [打印本页]

作者: 唐王潮    时间: 2014-10-21 18:19
标题: 关于农夫过河问题,老夫考虑了一天时间,只为纯程序判断,代码如下,忘指点!
大家看看有什么更简便的方法没有,不加入个人主观思路,纯粹让程序判断。
  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;
  5. public class Test9 {
  6.         /*
  7.          *
  8.          * 思路:
  9.          * 1.定义一个方法用来判断岸边是否和谐
  10.          * 2.第一次过河,老农随机带走一个,判断岸边是否和谐,不和谐把带走的放回去
  11.          * 3.老农从对岸返回
  12.          * 4.老农从正岸随机带走一个到对岸,判断对岸是否和谐,不和谐则随机带走一个到正岸,判断正岸是否和谐,
  13.          *   不和谐再随机从正岸带走一个到对岸,无限循环直到对岸和谐。
  14.          * 5.老农从对岸返回正岸
  15.          * 6.老农从正岸将最后一只动物带到对岸,至此全部过河。
  16.          */
  17.         public static void main(String[] args) {
  18.                 //此岸
  19.                 List<String> river = new ArrayList<String>();
  20.                 //初始化成员
  21.                 river.add("猫");
  22.                 river.add("狗");
  23.                 river.add("鱼");
  24.                 //对岸
  25.                 List<String> otherSide = new ArrayList<String>();
  26.                 //开始渡河
  27.                 while(otherSide.size()!=3){
  28.                         //第一次随机带走
  29.                         Random ran = new Random();
  30.                         int r = ran.nextInt(3);//随机获取0-2角标
  31.                         String aim1 = river.get(r);//获取随机角标对应的此岸动物
  32.                         river.remove(r);//带随机角标对应的动物过河
  33.                         //如果此岸和谐
  34.                         if(getTrue(river)){
  35.                                 System.out.println("———传说很久很久以前———");
  36.                                 System.out.println("1.农夫带["+aim1+"]>>对岸");
  37.                                 System.out.println("2.农夫回到此<<岸");
  38.                                 //将随机带走的动物放到对岸
  39.                                 otherSide.add(aim1);
  40.                                 //创建2个临时集合用于存储动物,以便取出正确方案的动物
  41.                                 List<String> temp1 = new ArrayList<String>();
  42.                                 List<String> temp2 = new ArrayList<String>();
  43.                                 //农夫回到此岸第二次随机带走
  44.                                 while(otherSide.size()!=3){
  45.                                         r = ran.nextInt(2);//随机获取0-1角标
  46.                                         String aim2 = river.get(r);//获取随机角标对应的此岸动物
  47.                                         river.remove(r);//带随机角标对应的动物过河
  48.                                         otherSide.add(aim2);//将随机带走的动物放到对岸
  49.                                         temp1.add(aim2);
  50.                                         //判断对岸是否和谐
  51.                                         if(getTrue(otherSide)){
  52.                                                 //如果对岸和谐,那么temp1最后一个元素对应的一定是鱼或狗
  53.                                                 String aim4 = temp1.get(temp1.size()-1);
  54.                                                 System.out.println("3.农夫带["+aim4+"]到对>>岸");
  55.                                                
  56.                                                 String aim5 = temp2.get(temp2.size()-1);
  57.                                                 System.out.println("4.农夫带【"+aim5+"】回到此<<岸");
  58.                                                
  59.                                                 //如果对岸和谐,且狗已经被带过去了,那么这里带走的一定是鱼,反之亦然。
  60.                                                 if(aim4.equals("狗")){
  61.                                                         aim4 = "鱼";
  62.                                                         System.out.println("5.农夫带["+aim4+"]到对>>岸");
  63.                                                 }else{
  64.                                                         aim4 = "狗";
  65.                                                         System.out.println("5.农夫带["+aim4+"]到对>>岸");
  66.                                                 }
  67.                                                 System.out.println("6.农夫回到此<<岸");
  68.                                                
  69.                                                 otherSide.addAll(river);
  70.                                                 System.out.println("7.农夫带"+river+"到对>>岸");
  71.                                                 System.out.println("——————大结局———————\r{老农泪流满面的看着一群完\r好无损的小动物,开开心心\r的相亲去了}");
  72.                                         }else{
  73.                                                 //如果对岸不和谐
  74.                                                 r = ran.nextInt(2);//随机获取0-1角标
  75.                                                 String aim3 = otherSide.get(r);//获取随机角标对应的对岸动物
  76.                                                 otherSide.remove(r);//将随机角标对应的对岸动物带回此岸
  77.                                                 river.add(aim3);//将随机角标对应的对岸动物放到此岸
  78.                                                 temp2.add(aim3);//如果对岸和谐,那么temp2中最后一个元素一定是猫
  79.                                         }
  80.                                 }
  81.                         //如果此岸不和谐
  82.                         }else{
  83.                                 river.add(aim1);
  84.                         }
  85.                 }
  86.         }
  87.         //判断岸边是否和谐
  88.         public static boolean getTrue(List<String> list) {
  89.                
  90.                 if((list.contains("猫")&&list.contains("狗"))||(list.contains("猫")&&list.contains("鱼"))){
  91.                         return false;
  92.                 }else{
  93.                         return true;
  94.                 }
  95.         }
  96.        

  97. }
复制代码

作者: zhengzhaozhao    时间: 2014-10-21 18:29
非常牛B




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2