黑马程序员技术交流社区

标题: 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农... [打印本页]

作者: ysheluo    时间: 2015-4-2 12:08
标题: 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农...
package com.itheima;

import java.util.ArrayList;

/*第十题:
* 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
*思路:定义两个Arraylist,左岸,右岸,只要左岸list长度为0即可
*    其间当船不为空时判断左岸右岸是否同时存在猫鱼或者猫狗的问题
*/
public class Test10 {
       
        public static void sop(Object obj){
                System.out.println(obj);
        }
        public static void main(String[] args){
                //创建两个ArraylList,用于存放左岸右岸的元素
                ArrayList<String> left=new ArrayList<String>();
                ArrayList<String> right=new ArrayList<String>();
                left.add("猫");
                left.add("鱼");
                left.add("狗");//设定初始条件猫狗鱼在河的左岸
                int count=1;
                while(left.size()!=0){       
                        //左岸情况
                        if((count%2)!=0){
                                //如果count数为奇数,那么老农在河的左岸
                                for(int i=0;i<left.size();i++){
                                        String a=left.get(i);//用于存储没运之前状况用以恢复
                                        left.remove(i);
                                        if((left.contains("狗")&&left.contains("猫"))||
                                                        (left.contains("鱼")&&left.contains("猫"))){
                                                //检测运走一只动物后左岸是否会出现不良事件,若出现将左岸还原,然后继续循环
                                                left.add(a);
                                                continue;
                                        }//如果左岸出现猫鱼。猫狗现象则将left还原重新循环
                                        else{
                                                right.add(a);
                                                sop("第"+count+"次运送"+a+"去右岸");
                                                break;//
                                                }
                                }
                                count++;
                        }
                        else{
                                if((right.contains("狗")&&right.contains("猫"))||
                                                (right.contains("鱼")&&right.contains("猫"))){
                                        for(int j=0;j<right.size();j++){
                                                String b=right.get(j);//用于存储没运之前状况用以恢复
                                                right.remove(j);
                                                if((right.contains("狗")&&right.contains("猫"))||
                                                                (right.contains("鱼")&&right.contains("猫"))){
                                                        //检测运走一只动物后左岸是否会出现不良事件,若出现将左岸还原,然后继续循环
                                                        right.add(b);
                                                        continue;
                                                }//如果左岸出现猫鱼。猫狗现象则将left还原重新循环
                                                else{
                                                        left.add(b);
                                                        sop("第"+count+"次运送"+b+"去左岸");
                                                        break;
                                                }
                                        }
                                }
                                else{
                                sop("第"+count+"次老农独自乘船去左岸");
                                }
                                count++;
                        }
                }
        }
}



作者: kfcka    时间: 2015-4-2 14:04
第十题:???这是哪里的题,应该不是黑马考试的题吧?
作者: ysheluo    时间: 2015-4-2 14:14
kfcka 发表于 2015-4-2 14:04
第十题:???这是哪里的题,应该不是黑马考试的题吧?

基础测试那十道题啊




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