标题:请帮忙看看农夫带动物过河的代码,为什么会死循环
只看楼主
笔墨痕干
Rank: 1
等 级:新手上路
威 望:1
帖 子:56
专家分:0
注 册:2014-3-24
结帖率:84.21%
 问题点数:0 回复次数:3 
请帮忙看看农夫带动物过河的代码,为什么会死循环
程序代码:
package com.itheima;

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

/**

 * 第10题: 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。

 *           当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。

 *

 *

 */
public class Test10 {
    static int count=0;//记录船使用的次数
    public static void main(String[] args){
        //两个集合分别代表了左岸,右岸,初始时老农,猫,狗,鱼都在左岸。
        LinkedList linkLeft=new LinkedList();
        LinkedList linkRight=new LinkedList();
        linkLeft.addLast("老农");
        linkLeft.addLast("猫");
        linkLeft.addLast("狗");
        linkLeft.addLast("鱼");
       
        //一个字符串数组,代表了船,同时船上同时只能有两个元素
        String[] boat={"",""};
        //准备过河,船上有老农
        boat[0]=(String) linkLeft.remove(0);
        //左岸没有元素时停止循环
        while(!linkLeft.isEmpty()){
            //通过遍历,向左岸运送元素
            for(int i=0;i<linkLeft.size();i++){
                System.out.println("i是:"+i);
                //每运一个元素,左岸减少1
                boat[1]=(String) linkLeft.removeFirst();
                System.out.println("动物是:"+boat[1]);
                //调用函数判断左岸元素是否能共存
                boolean flage=judge(linkLeft);
                //如果左岸元素可以共存
                if(flage==true){
                    //说明船使用了一次
                    count++;
                    //向右岸增加左岸的运送的元素
                    linkRight.addFirst(boat[1]);
                    //判断右岸元素能否共存
                    boolean b=judge(linkRight);
                    System.out.println(b);
                    //如果能共存,就输出
                    if(b==true){
                        System.out.println("第"+count+"次,从左岸运到右岸,运输的是:"+boat[1]);
                        break;
                    }
                    //如果不能共存,取走之前存放在右岸的元素,把此元素在放回左岸
                    else{
                        System.out.println("第"+count+"次,从左岸运到右岸,运输的是:"+boat[1]);
                        boat[1]=(String)linkRight.removeLast();
                        count++;
                        linkLeft.addLast(boat[1]);//为什么加上这句话之后程序就变成了死循环
                        System.out.println("第"+count+"次,从右岸运到左岸,运输的是:"+boat[1]);
                       
                        continue;
                    }
               
                }
                //如果左岸元素不能共存,在左岸添加已经被删除的元素
                else{
                    linkLeft.addLast(boat[1]);
                    break;
                }
               
            }
           
           
        }
//        linkRight.add("老农");
//        System.out.println("同时老农上岸");
        System.out.println(linkRight);
        System.out.println(linkLeft);
        boat[0]="";
        boat[1]="";
    }

//判断元素是否能共存
    private static boolean judge(LinkedList list) {
        // TODO Auto-generated method stub
        if(list.contains("猫")&&list.contains("鱼"))
            return false;
        if(list.contains("猫")&&list.contains("狗"))
            return false;
        if(list.contains("猫")&&list.contains("狗")&&list.contains("鱼")){
            System.out.println("sdsfs");
            return true;
        }
        return true;
    }
}
    linkLeft.addLast(boat[1]);//为什么加上这句话之后程序就变成了死循环
加上这句话之后就死循环了,帮我看看,急求!!!
搜索更多相关主题的帖子: 动物 农夫 
2015-05-06 13:39
d276921261
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-5-8
得分:0 
回复 楼主 笔墨痕干
你的 判断共存方法 有误。每次运送完成之后,会通过第一条判断,直接return  fales了
2015-05-08 16:02
xz842266736
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2014-5-30
得分:0 
楼上加一
2015-05-16 16:43
掌舵者
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-3-31
得分:0 
把judge()方法改成这样就完事了:
//判断元素是否能共存
    private static boolean judge(LinkedList list) {
        // TODO Auto-generated method stub
        if(list.contains("猫")&&list.contains("狗")&&list.contains("鱼")){
            System.out.println("sdsfs");
            return true;
        }
        if(list.contains("猫")&&list.contains("鱼"))
            return false;
        if(list.contains("猫")&&list.contains("狗"))
            return false;
        
        return true;
    }
2015-05-17 14:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-444898-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.441037 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved