import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,* 当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。* * 思路:* 1.猫不能和其他两种动物在一起* 2.先把猫带到对岸*   农夫自己回来*   农夫把狗或鱼带到对岸*   农夫把猫带回来*   农夫再把剩下的动物带到对岸*   农夫自己回来*   农夫把猫带到对岸* @author xiajie**/
public class Test10 {//定义猫狗鱼变量private static final String cat = " 猫 ";private static final String dog = " 狗 ";private static final String fish = " 鱼 ";private static final String farmer = " 农夫 ";private static  List<String> left = new ArrayList<String>();//左岸的集合private static  List<String> right = new ArrayList<String>();//右岸的集合//在无参构造方法中将猫狗鱼添加到left集合中去public Test10(){left.add(fish);left.add(dog);left.add(farmer);left.add(cat);}public static void main(String[] args) {new Test10().cross();//实例化本来对象并调用过河方法}public static void cross(){//当左岸有动物就一直继续while(left.size() > 1){left.remove(farmer);//农夫一定要带着一个动物渡河           Random random = new Random();//老农随机带走一直动物int index = random.nextInt(left.size());//产生的随机数不能大于总个数,即产生了一个 不大于left.size的数字if(index == left.size()-1  && left.size()>1){//为防止老农带走刚带回来的动物,因为这个List中存储数据是先进先出的所以,不能是最后的一个数,因为最后一个数表示的是农夫刚带回来动物,最后加如leftList中的left.add(farmer);continue;//continue 跳过当前循环体continue后面的代码,继续执行下一个循环}String animal = left.get(index);//随机产生的动物left.remove(animal);//带走随机产生的一个动物if(isFriendly(left)){//如果老农带走该动物后,正岸没有冲突,则带走该动物right.add(farmer);//老农和动物到岸,加入Left集合中区right.add(animal);System.out.println("老农带着"+animal+"到了对岸");if(right.size() == 4){ //当老农和动物全部到达对岸,则渡河完成break;//break 跳出当前循环体}right.remove(farmer);//老农返回if(isFriendly(right)){//如果老农独自返回右岸和谐,则让老农独自返回left.add(farmer);System.out.println("老农独自返回");}else{//否则老农要随机带一直动物回来String animal2 = right.get(random.nextInt(right.size()));while(animal2.equals(animal)){animal2 = right.get(random.nextInt(right.size()));}right.remove(animal2);left.add(farmer);left.add(animal2);//老农带着一个动物返回System.out.println("老农带着"+animal2+"返回");}}else{//如果老农带走该动物后,正岸发生冲突,则放回动物,重新加入Left集合中去left.add(animal);left.add(farmer);}}System.out.println("所有动物都成功过河了,完成任务!!!");}//用来判断两种动物在一起是不是和谐public static boolean isFriendly(List<String> list){boolean flag ;//如果猫和其他的在一起,而没有人则不和谐if(list.size() >1 && list.contains(cat) && !list.contains(farmer)){flag = false ;}else{flag = true ;}return flag;}
}

注意:一定要让程序根据题目的条件自己选择执行,不能按照自己的想法去指定程序运行的步骤。

输出结果:

老农带着 猫 到了对岸
老农独自返回
老农带着 鱼 到了对岸
老农带着 猫 返回
老农带着 狗 到了对岸
老农独自返回
老农带着 猫 到了对岸
所有动物都成功过河了,完成任务!!!

一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。相关推荐

  1. /* 商人过河的问题 假如有三个商人各带一个随从要过河。 只有一条船得需要他们划每次只能坐两个人,条件是任何一岸的随从多于商人时随从就会抢劫商人。 请问这三个商人怎样才能安全过河? */...

    */ import java.util. * ; public class Test4{ /** 内部类,用来把保存过河过程中的路线和状态. * 五个属性: * to为ture表示去对岸,否则表示从对 ...

  2. 黑马程序员-10.一位老农带着猫、狗、鱼过河

    ------ Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 题目是10. 一位老农带着猫.狗.鱼过河,河边有一条船,每次老农只能带一只动物过河.当老农不和 ...

  3. 老农解决猫狗鱼的问题(黑马基础习题)

    package com.itheima; import java.util.LinkedList; import java.util.List; /**  * 题目:  * 10. 一位老农带着猫.狗 ...

  4. 《狂飙》台词“老默我想吃鱼了”被抢注商标

    <狂飙>台词"老默我想吃鱼了"被抢注商标,#老默我想吃鱼了被抢注商标 #老默我想吃鱼了 #告诉老默我想吃鱼了 #商标被抢注 #狂飙 老默我想吃鱼了被抢注商标 近期,电视 ...

  5. 【训练4】猫吃鱼,狗吃肉(匿名内部类)

    [训练4]猫吃鱼,狗吃肉 参照下面的代码,创建Animal类的匿名子类对象,重写eat()方法,执行该方法后会在控制台打印"猫吃鱼,狗吃肉"字样. /*[训练4]猫吃鱼,狗吃肉* ...

  6. Java主人喂猫吃鱼的实验总结,小猫吃鱼的作文4篇

    小猫吃鱼的作文4篇 小猫吃鱼的作文1 夏天的一个星期天的早晨,万里晴空,骄阳似火.一只好看的小花猫肚子饿了,到野外找食吃.它来到小河边,看到河边的老槐树下拴着一条狗,黑黑的绒毛,四肢雪白,长长的尾巴往 ...

  7. java多态猫狗吃骨头_javaSE学习(6):面向对象:多态的两个经典案例(猫狗案例和南北方人案例)...

    1.猫狗多态案例 /* 2019年5月19日9点48 @author 潇雷 猫狗案例多态版: */ class Animal{ public void eat(){ System.out.printl ...

  8. 猫喜欢吃鱼,可猫不会游泳

    猫喜欢吃鱼,可猫不会游泳.鱼喜欢吃蚯蚓,可鱼又不能上岸.上天给了你许多诱惑,却不让你轻易得到.要想实现,就要自己奋斗.人生就像蒲公英,看似自由,却往往身不由己.生活没有如果,只有结果,自己尽力了,努力 ...

  9. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(代码实现)

    软件实习项目2--贪吃喵(猫吃鱼版贪吃蛇)(代码实现) 类变量的定义以及类的初始化__init__ 一.游戏的逻辑 1.猫头的生成 2.鱼的生成 3.猫头和鱼骨的移动 4.按下键盘,改变方向 二.主窗 ...

最新文章

  1. 10大经典排序算法,20+张图就搞定
  2. wxWidgets:在全局范围内捕捉关键事件
  3. Javascript中大括号“{}”的多义性
  4. php image 转 data uri 图片 (Image Data URIs with PHP)
  5. UIControl IOS控件编程
  6. java 去除html中img_JAVA去除HTML标签
  7. Docker+SVN
  8. [整理]Linux压缩与解压缩命令整理。
  9. ZOJ 1654 二分匹配基础题
  10. 用spss做哑变量(含spss安装教程)
  11. 如何自制圆环_PPT中如何制作环形图高级教程
  12. hadoop功能测试
  13. python爬虫中国土地市场网的相关数据最新2021/5/7
  14. PP视频(PPTV聚力)web接口分析
  15. 怎样用VR看分频视频?
  16. 生产订单的计划、实际成本与产出查看
  17. License server system does not support this version of this feature
  18. 用HTML5+CSS3实现qq会员页面的仿制
  19. BCD码、8421码、余三码、格雷码
  20. 高通骁龙855,麒麟980,A12,Exynos 9820芯片参数比较

热门文章

  1. 通信运营商客户流失预测
  2. 什么是挂载,Linux挂载详解
  3. yolov5 + second_classify -- 代码
  4. 黄智生教授:大数据时代的语义技术(公号回复“黄智生语义技术”下载彩标PDF论文)
  5. 场效应管微变等效电路的计算_微变等效电路如图.ppt
  6. Flink常见的面试题
  7. Swarm简介和使用教程-Docker-swarm和Docker-machine
  8. 如何选择指针中置空?NULL, nullptr, 0?
  9. PANOPLY:Low-TCB Linux Applications with SGX Enclaves笔记
  10. Linux安装围棋AI(q5go和katago)