黑马程序员技术交流社区

标题: 这个题,我一点思路都没有 [打印本页]

作者: 眼镜你别跑    时间: 2014-7-3 16:53
标题: 这个题,我一点思路都没有
一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。

作者: SLJ_920808    时间: 2014-7-3 20:24
建议分成三种情况讨论:可以用if语句,分别详细的考虑,比如当农夫先带狗过河的时候同时把猫带着,然后再把猫带回来,然后接着带鱼过河。你可以就按照这个思路分析。希望对你思路有帮助。
作者: .____盒子    时间: 2014-7-3 21:32
package zuolianxi;

import java.util.ArrayList;
import java.util.List;

public class AllText {
        class Animal {

                // 解题思路:先带走猫,后带走狗,再把猫带回,把鱼带过去,最后再把猫带过去即可

                // 定义两个集合,存放,带过去的动物,和剩下的动物
                List<String> there = new ArrayList<String>();
                List<String> here = new ArrayList<String>();

                public void main(String[] args) {
                        here.add("cat");
                        here.add("dog");
                        here.add("fish");

                        Animal animal = new Animal();
                        animal.take();
                }

                // 判断动物是否安全
                public boolean isSafty(List<String> list) {
                        // 如果一个集合中同时出现了猫和狗,猫和鱼的都认为不安全
                        if (list.add("dog") && list.add("cat") || list.add("cat")&& list.add("fish")) {
                                       
                                return false;
                        }
                        return true;
                }

                public void take() {
                        // 得到要带走的动物
                        String anim = here.get(0);
                        // 从剩下的集合中删除
                        here.remove(here.get(0));

                        if (anim.equals("cat")) {

                                // 添加到以带过去的集合里面
                                there.add(anim);

                                // 继续带下一个动物
                                if (here.isEmpty()) {
                                        System.out.println();
                                        System.out.println("最后在把" + anim + "带走了");
                                        return;
                                } else {
                                        System.out.println("带走了" + anim);
                                        System.out.print("剩下:");
                                        for (String s : here) {
                                                System.out.print(s + "   ");
                                        }
                                        System.out.println();
                                        System.out.println("----------------------------");
                                        take();
                                }

                        } else if (anim.equals("dog")) {
                                there.add(anim);
                                System.out.println("然后把" + anim + "带走");
                                // 判断是否安全,之后继续带下一个动物
                                if (isSafty(there)) {
                                        take();
                                } else {
                                        String animal = there.get(0);
                                        there.remove(animal);
                                        here.add(animal);
                                        System.out.println("然后把" + animal + "带回");
                                        // 继续带下一个动物
                                        take();
                                }
                        } else if (anim.equals("fish")) {
                                System.out.print("之后把" + anim + "带走");

                                take();
                        }
                }
        }

}
作者: 唐晓东    时间: 2014-7-3 21:51
if else if else,这样写
作者: 空心祭    时间: 2014-7-4 09:33
遇到这题的真悲剧
作者: 眼镜你别跑    时间: 2014-7-5 10:19
谢谢了,呵呵,很不错的答案





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