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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cheukfan 中级黑马   /  2016-11-30 14:16  /  1250 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.ArrayList;
public class Test10 {
        public static void main(String[] args) {
                crossRiver();
        }
        public static void crossRiver()
        {
                //创建ArrayList对象leftBank和rightBank分别用来存储河岸两边的动物
                List<String> leftBank = new ArrayList<String>();
                leftBank.add("fish");
                leftBank.add("cat");
                leftBank.add("dog");
                List<String> rightBank = new ArrayList<String>();
               
                boolean isAtLeftBank = true;  //农夫在左岸
                String animal = ""; //老农带走的动物
               
                //当左岸没有动物时循环结束
                while(!leftBank.isEmpty())
                {
                        //老农在左岸,如果带走一只动物后左岸的动物有危险,则不带走,否则将动物添加到右岸中
                        if (isAtLeftBank)
                        {
                                for (int  i = 0; i < leftBank.size(); i++)
                                {
                                        animal = leftBank.remove(i);
                                        //如果剩下动物存在危险,把不能被带走的动物重新添加到原来的位置
                                        if (AtRisk(leftBank))
                                        {
                                                leftBank.add(i, animal);
                                                continue;
                                        }
                                        else
                                        {
                                                rightBank.add(animal);
                                                System.out.println("老农带"+animal+"过河");
                                                break ; //跳出for循环
                                        }
                                }
                                isAtLeftBank = false;
                        }
                        /* 老农在右岸,如果此时右岸的动物没有危险,则老农独自一人回去
                         * 否则需从右岸动物中选一只带走,判断余下的动物是否危险,
                         */
                        else
                        {
                                if (AtRisk(rightBank))
                                {
                                        for (int  i = 0; i < rightBank.size(); i++) {
                                                animal = rightBank.remove(i);
                                                if (AtRisk(rightBank))
                                                {
                                                        rightBank.add(i, animal);
                                                        continue;
                                                }
                                                else
                                                {
                                                        leftBank.add(animal);
                                                        System.out.println("老农带"+animal+"回来");
                                                        break;
                                                }
                                        }
                                }
                                else
                                {
                                        System.out.println("老农独自回来");
                                }        
                                isAtLeftBank = true;
                        }
                }
                System.out.println("过河成功!");
        }
        
        /*
         * 定义AtRisk方法,判断岸边的动物是否存在危险
         * 岸边同时有狗和猫,或猫和鱼时,返回true,否则返回false
         */
        public static boolean AtRisk(List<String> list){
                if (list.contains("dog") && list.contains("cat"))
                        return true;
                else if (list.contains("fish") && list.contains("cat"))
                        return true;
                else
                        return false;
        }
}

4 个回复

倒序浏览
同学,厉害啊
回复 使用道具 举报
可以的,
回复 使用道具 举报
66666666666666
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马