黑马程序员技术交流社区

标题: 农夫猫狗鱼过河的题目 [打印本页]

作者: 达达达    时间: 2015-9-25 21:52
标题: 农夫猫狗鱼过河的题目
用两个集合表示河岸,那怎么样实现过河的操作呢?

判断两岸的动物是不是和谐很简单,但是怎么体现送狗过河然后带回猫的动作?

我想实现这个过程,不需要系统判断,而是按照猫-狗-猫-鱼-猫这样的动作,求指教该怎么做
作者: 915816106    时间: 2015-9-25 22:29
public class Test10 {
    int farmer,cat,dog,fish; //刚开始都为0,也就是都在河的这岸
    String type = ""; //记录农夫上一步带的是什么,防止出现死循环,当农夫自己走时type不改变
    String isnull = "";//当农夫自己走时,isnull会记录下来,防止出现死循环。
    boolean boo = false;
    public static void main(String[] args) {
            Test10 test = new Test10();
            int x = 1;//记录移动的数次
            while(true){
               test.move();
       System.out.println("第"+x+"步");
       System.out.println("河这岸有:"+test.print(0));
       System.out.println("河对岸有:"+test.print(1));
       x++;
       //当把全部东西都移动到对岸时,即可停止移动。
       if(test.farmer==1&&test.cat==1&&test.dog==1&&test.fish==1){
           break;
       }
       }
               
        
    }
   
    //农夫过河时需要判断能带什么不能带什么
    public void move(){
            
            if(farmer==0){
                    if(cat==0){
                            if(!type.equals("cat")){
                                    farmer = 1;
                                    cat = 1;
                                    if(isSafe()){
                                            type = "cat";
                                            return;
                                    }else{
                                            farmer = 0;
                                            cat = 0;
                                    }
                            }
                    }
                    if(dog==0){
                            if(!type.equals("dog")){
                                    farmer = 1;
                                    dog = 1;
                                    if(isSafe()){
                                            type = "dog";
                                            return;
                                    }else{
                                            farmer = 0;
                                            dog = 0;
                                    }
                            }
                    }
                    if(fish==0){
                            if(!type.equals("fish")){
                                    farmer = 1;
                                    fish = 1;
                                    if(isSafe()){
                                            type = "fish";
                                            return;
                                    }else{
                                            farmer = 0;
                                            fish = 0;
                                    }
                            }
                    }
                            farmer = 1;
                    
            }else if(farmer==1){
                    //当人在河对岸时需要优先考虑自已到这岸来,从而把东西带到对岸。
                    if(isnull != "farmer"){
                            farmer = 0;
                            isnull = "farmer";
                            if(isSafe()){
                                    return;
                            }else{
                                    farmer = 1;
                            }
                    }
                           
                    if(cat==1){
                            if(!type.equals("cat")){
                                    farmer = 0;
                                    cat = 0;
                                    if(isSafe()){
                                            type = "cat";
                                            isnull = "";
                                            return;
                                    }else{
                                            farmer = 1;
                                            cat = 1;
                                    }
                            }
                    }
                    if(dog==1){
                            if(!type.equals("dog")){
                                    farmer = 0;
                                    dog = 0;
                                    if(isSafe()){
                                            type = "dog";
                                            isnull = "";
                                            return;
                                    }else{
                                            farmer = 1;
                                            dog = 1;
                                    }
                            }
                    }
                    if(fish==1){
                            if(!type.equals("fish")){
                                    farmer = 0;
                                    dog = 0;
                                    if(isSafe()){
                                            type = "fish";
                                            isnull = "";
                                            return;
                                    }else{
                                            farmer = 1;
                                            fish = 1;
                                    }
                            }
                    }
            }
    }
   
    //判断现在的状态是否有冲突
    public boolean isSafe(){
            if(farmer==1){
                    if(cat==0&&fish==0)return false;
                    if(cat==0&&dog==0)return false;
            }else if(farmer==0){
                    if(cat==1&&fish==1)return false;
                    if(cat==1&&dog==1)return false;
            }
            return true;
    }
   
    //打印现在河的两岸都有什么
    public String print(int i){
            if(i==0){
                    String str = "";
                    if(farmer==0)str += "农夫    ";
                    if(dog==0)str += "狗    ";
                    if(cat==0)str += "猫    ";
                    if(fish==0)str += "鱼    ";
                    return str;
            }else if(i==1){
                    String str = "";
                    if(farmer==1)str += "农夫    ";
                    if(dog==1)str += "狗    ";
                    if(cat==1)str += "猫    ";
                    if(fish==1)str += "鱼    ";
                    return str;
            }
            return null;
    }

}
作者: 呵呵哒    时间: 2015-9-25 22:58
写的不错
作者: zllqxy    时间: 2015-9-25 23:05
真的好难啊
作者: OhYoung_Fun    时间: 2015-9-25 23:07
学习了。。。。。。。。。。。。。。。。。。
作者: Arron    时间: 2015-9-25 23:13
牛b 呀  各位!!!  小弟 学习了!!!




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