黑马程序员技术交流社区

标题: 老农带着猫、狗、鱼过河问题 [打印本页]

作者: xiong910627    时间: 2014-9-4 10:40
标题: 老农带着猫、狗、鱼过河问题
本帖最后由 xiong910627 于 2014-9-4 21:16 编辑

一位老农带着猫、狗、鱼过河,河边有一条船,
* 每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,
* 狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,
* 则不会发生这种问题。编程解决猫狗鱼过河问题。
  1. import java.util.ArrayList;

  2. public class Test10 {
  3.         
  4.         public static void main(String[] args)
  5.         {
  6.                 new Test10().tohere();
  7.         }
  8.                 //创建一个集合,代表起始点.
  9.                 ArrayList<String> here = new ArrayList<String>();
  10.                 //创建一个集合,代表终点.
  11.                 ArrayList<String> there = new ArrayList<String>();
  12.                 //添加元素.
  13.                 public Test10()
  14.                 {
  15.                         here.add("Dog");
  16.                         here.add("cat");
  17.                         here.add("fish");
  18.                 }
  19.         
  20.                 //定义一个方法,用来判断这三个动物之间关系.
  21.                 public boolean isSafe(ArrayList<String> al)
  22.                 {
  23.                         if (al.contains("dog") && al.contains("cat")|| al.contains("cat") && al.contains("fish"))
  24.                         {
  25.                                 return false;
  26.                         }
  27.                         return true;
  28.                 }

  29.                 //定义一个方法,将起点的元素送到终点.
  30.                 public void tohere() {
  31.                         String str = here.get(0);
  32.                         here.remove(str);
  33.                         if (isSafe(here)) {
  34.                                 System.out.println("1农夫带着" + str + "去往对岸,这边还剩下" + here + ",对岸有" + there);
  35.                                 toThere(str);
  36.                         } else {
  37.                                 here.add(str);
  38.                                 tohere();
  39.                         }
  40.                 }
  41.                 //定义一个方法,用来查看终点的元素.
  42.                 public void toThere(String s) {
  43.                         
  44.                         if (isSafe(there)) {
  45.                                 there.add(s);
  46.                         
  47.                                 if(here.isEmpty()){
  48.                                         System.out.println("4农夫,"+there+"都被你带过来了");
  49.                                         return;
  50.                                 }
  51.                         
  52.                                 if(isSafe(there)){
  53.                                         System.out.println("2农夫回到原点,对岸有" + there);
  54.                                         tohere();
  55.                                 }else{
  56.                                         String temp=there.get(0);
  57.                                         there.remove(temp);
  58.                                         System.out.println("3农夫带着"+temp+"回到原点,这边有" + here + ",对岸有" + there);
  59.                                         here.add(temp);
  60.                                         tohere();
  61.                                 }
  62.                         } else {
  63.                                 there.remove(s);
  64.                                 tohere();}
  65.                 }
  66. }

复制代码






作者: chen_32768    时间: 2014-9-4 16:04
学习一下,我的测试题就是这个、
作者: 备战    时间: 2014-9-4 16:27
大神呀,借鉴一下。。
作者: iefegend    时间: 2014-9-4 18:42
学习学习

作者: 木易在他乡    时间: 2014-9-4 20:01
这个给力
作者: 舍我其谁    时间: 2014-9-4 20:12
我也来赞一个
作者: 陶圣虎    时间: 2014-9-4 20:21
学习下 啊
作者: 木易在他乡    时间: 2014-9-4 20:25
为什么采用get(0);呢,是否最后add进去的s都是放在索引为0的位置?
作者: 孤鸢    时间: 2014-9-4 21:11
顶一个,学到了再来研究
作者: 大山    时间: 2014-9-4 21:15
这么牛啊
作者: 2014heima    时间: 2014-9-4 21:21
跟我的基础测试一样
作者: wyf20106    时间: 2014-9-4 22:18
学习了谢谢分享
作者: 许愿じ☆VE杰    时间: 2014-9-4 22:22
跟我的测试一样
作者: 没詴傘的孩子    时间: 2014-9-4 23:25
我也是这个题
作者: 莫忘本心    时间: 2014-9-4 23:58
进来看看该怎么写
作者: ╃→梅飛揚之城    时间: 2014-9-5 00:20
学习一下
作者: 忆梦追风    时间: 2014-9-5 18:44
额,看看了,我没这个题,听说这个题很火
作者: cs8630323    时间: 2014-9-5 20:49
测试题最好不要发答案
作者: 沈木生    时间: 2014-9-5 23:21
可惜还是要先自己理解一下的
作者: 低调小邦    时间: 2014-9-6 00:24
没看懂都
作者: 塞纳河的悲伤    时间: 2014-9-6 18:57
感谢分享了
作者: 范鹏霄    时间: 2014-9-6 21:22
    学习了
作者: 马嘉    时间: 2014-9-6 21:47
chen_32768 发表于 2014-9-4 16:04
学习一下,我的测试题就是这个、

这个是基础测试吗。兄弟
作者: 找寻小龙猫    时间: 2014-12-27 16:07
学习了 ,我的也是这个……
作者: lgc黑马    时间: 2014-12-27 21:38
顶顶顶顶顶顶
作者: mike77546    时间: 2015-1-11 18:07
学习下。。。。。。。
作者: Afridoce    时间: 2015-1-12 10:42
来赞一个
作者: Afridoce    时间: 2015-1-12 10:45
来赞一个
作者: IT未来    时间: 2015-3-5 21:05
谢谢分享,学习了
作者: IT未来    时间: 2015-3-5 21:09
赞一个学习了。
作者: java梦想    时间: 2015-3-9 14:52
楼主好厉害!
作者: 火七君    时间: 2015-3-11 10:04
正常用汉字很轻松就能解决,可用代码就很吃力。学习了。
作者: 树懒    时间: 2015-7-30 10:08
很厉害呀! 自己一开始完全不会做呢
作者: 千山万水    时间: 2015-8-4 13:34
这题  感觉挺难得额
作者: 风华正茂    时间: 2015-8-14 12:14
学习了,谢谢楼主分享
作者: michael_wlq    时间: 2015-9-28 22:03
测试试题啊。。。
作者: tansuozhey    时间: 2015-11-2 20:53
个人认为有些 部分没有必要,这样可以吗?
public class Test10 {
        public static void main(String[] args) {
                new Test10().tohere();
        }

    //创建一个集合,代表起始点.
    ArrayList<String> here = new ArrayList<String>();
    //创建一个集合,代表终点.
    ArrayList<String> there = new ArrayList<String>();
    //添加元素.
    public Test10()
    {
        here.add("Dog");
        here.add("cat");
        here.add("fish");
    }
   
    //定义一个方法,用来判断这三个动物之间关系.
    public boolean isSafe(ArrayList<String> al){
            if (al.contains("dog") && al.contains("cat")
                            || al.contains("cat") && al.contains("fish")){
                    return false;
        }
            return true;
    }

    //定义一个方法,将起点的元素送到终点.
    public void tohere() {
        String str = here.get(0);
        here.remove(str);
        if (isSafe(here)) {
            System.out.println("1农夫带着" + str + "去往对岸,这边还剩下" + here + ",对岸有" + there);
            toThere(str);
            }
                else{
                here.add(str);
                tohere();
            }
    }

    //定义一个方法,用来查看终点的元素.
    public void toThere(String s){                  
       // if(isSafe(there)){
                        there.add(s);
                        if(here.isEmpty()){
                                System.out.println("4农夫,"+there+"都被你带过来了");
                                return;
                        }

                        if(isSafe(there)){
                                System.out.println("2农夫回到原点,对岸有" + there);
                                tohere();
                        }
                        else{
                                String temp=there.get(0);
                                there.remove(temp);
                                System.out.println("3农夫带着"+temp+"回到原点,这边有" + here + ",对岸有" + there);
                                here.add(temp);
                                tohere();
                        }
//        }
//        else{
//                        there.remove(s);
//                        tohere();
//        }
    }
}
作者: 莫盛强    时间: 2015-11-25 13:54
..........................
作者: 小菜鸡    时间: 2016-1-5 22:13
大牛啊                                 
作者: 马官聘    时间: 2016-1-18 12:33
其实代码不难,难的是思路
作者: 542826323    时间: 2016-1-23 16:58
我也是这个,




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