![]() |
#2
d2769212612015-05-08 16:02
回复 楼主 笔墨痕干
|

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]);//为什么加上这句话之后程序就变成了死循环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;
}
}
加上这句话之后就死循环了,帮我看看,急求!!!