2020-11-22

Java解决猫鱼问题

package weekend04;

import java.util.ArrayList;
import java.util.List;
import java.util.Random; 
public class Test2 {  
	public static void main(String[] args)    { 
		ArrayList<String> left = new ArrayList<String>();
		//定义左岸集合       
		ArrayList<String> right = new ArrayList<String>();
		//定义右岸集合        
		left.add("狗");        left.add("鱼");        left.add("猫");
		//把动物先加入到左岸集合中      
		String animal=null;
		//定义一个变量来存放当前要送出去的动物       
		int count=0;           
		//定义个变量来存放老农过河的次数,单数为准备去右河岸,双数反之        
		Random r =new Random();       
		while(!left.isEmpty())        { 
			count++;
			//每走一次就+1          
			animal=null;
			//初始化下一次要送出去的动物       
			if(count%2==1)
				//如果老农要去右岸            
				{                
				do//现在我采用的是随机挑选一个动物去右岸,直到不冲突为止          
					{                    animal=left.remove(r.nextInt(left.size()));
					//随机挑选一个动物              
					if(!cmpAnimal(left))                 
					{                        left.add(animal);  
					//如果送出去这个动物有冲突,就把他加回来重新挑选            
					}                } while (!cmpAnimal(left));
				//如果不为真,就代表冲突了,继续循环,直到不冲突为止              
				System.out.println("老农第"+count+"次,把"+animal+"送到了对岸...");          
				right.add(animal);      
				//循环结束后肯定返回的是一个没有冲突的动物                  
				}else if(count%2==0)
					//否则就是偶数,代表老农要从河岸回来       
    {                   while(!cmpAnimal(right))
    	//这里不用dowhile因为从左岸送过来的至少有一个动物,不用担心冲突           
    	{                    animal=right.remove(r.nextInt(right.size()));                  
    	if(!cmpAnimal(right))                   
    	{                       
    		right.add(animal);
    		//如果发生冲突了,采用随机的方法挑选一个动物返回到到河对面去    
    		}                }     
    if(animal==null)
    	//如果挑选出来的动物等于null表示河岸不存在冲突的地方直接返回去           
    	{                 
    	System.out.println("老农第"+count+"次,从河岸返回到了河对面...");          
    	continue;
    	//如果没有动物就返回到循环开始               
    	}              
    System.out.println("老农第"+count+"次,把"+animal+"送回到了河对面...");
    //如果说冲突了,就把某个动物带到河对面去..              
    left.add(animal);           
    }           
			}       
		}   
	public static boolean cmpAnimal(List<String> list)    {    
		if(list.contains("猫")&&list.contains("鱼")||list.contains("猫")&&list.contains("狗"))     
  {            return false;     
  //如果冲突了就返回假    
  }    
  return true;
  //没冲突就返回真  
  }  
	}
				
				
	


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值