农民带动物过河(狗猫鱼)

2023-11-02 11:59
文章标签 过河 动物 农民 猫鱼

本文主要是介绍农民带动物过河(狗猫鱼),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">备注:这个是黑马程序员的基础测试题,</span><span style="font-family: Arial, Helvetica, sans-serif; color: rgb(255, 0, 0); background-color: rgb(255, 255, 255);">代码都是我自己亲手写的</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">,跟其他人的不同,大家可以来看看,给给建议什么的。。。</span>

如需转载麻烦表明出处,附上此贴链接,谢谢!


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

代码:
import java.util.ArrayList;
import java.util.List;public class AnimalCrossRiver {private Bank srcBank;private Bank destBank;public AnimalCrossRiver(Bank srcBank, Bank destBank) {this.srcBank = srcBank;this.destBank = destBank;}public Bank getSrcBank() {return srcBank;}public Bank getDestBank() {return destBank;}public static void main(String[] args) {Bank srcBank = new Bank(initsrcBankAnimals(),true);Bank destBank = new Bank(new ArrayList<Animal>(), false);AnimalCrossRiver acr = new AnimalCrossRiver(srcBank, destBank);acr.riverCrossing();}	public static List<Animal> initsrcBankAnimals(){List<Animal> srcBankAnimals = new ArrayList<Animal>();srcBankAnimals.add(new Animal("狗",null));srcBankAnimals.add(new Animal("猫","狗"));srcBankAnimals.add(new Animal("鱼","猫"));		return srcBankAnimals;}private void riverCrossing(){		Bank srcBank = this.getSrcBank();Bank destBank = this.getDestBank();Animal temp1 = null;Animal temp2 = null;while(true){			temp1 = srcBank.removeAni();//函数中把此岸被设置没人		//对岸增加动物,自动设置对岸有人destBank.addAni(temp1);	//打印信息System.out.println("河岸----------------->对岸(人在对岸)");System.out.println("河岸上动物个数:"+srcBank.getBankAnimals().size());System.out.print(srcBank.isHasHuman()? "有人:":"没人:"+" ");for(Animal animal:srcBank.getBankAnimals()){System.out.print(animal.getName()+" ");}System.out.println();System.out.println("对岸上动物个数:"+destBank.getBankAnimals().size());System.out.print(destBank.isHasHuman()? "有人:":"没人:"+" ");for(Animal animal:destBank.getBankAnimals()){System.out.print(animal.getName()+" ");}System.out.println();			if(destBank.getBankAnimals().size() == 3){ //对岸动物数量达到三个,结束System.out.println();System.out.println("-----全部通过河岸-----");break;}/****如果从对岸离开后对岸不安全,带走一个动物到河岸****/if(!destBank.noHumanisSafe()){temp2 = destBank.removeAni();				srcBank.addAni(temp2);		//把从对岸带回来的动物添加到河岸,设置有人//打印信息System.out.println();System.out.println("对岸----------------->河岸()人在河岸");System.out.println("河岸上动物个数:"+srcBank.getBankAnimals().size());System.out.print(srcBank.isHasHuman()? "有人:":"没人:"+" ");for(Animal animal:srcBank.getBankAnimals()){System.out.print(animal.getName()+" ");}System.out.println();System.out.println("对岸上动物个数:"+destBank.getBankAnimals().size());System.out.print(destBank.isHasHuman()? "有人:":"没人:"+" ");for(Animal animal:destBank.getBankAnimals()){System.out.print(animal.getName()+" ");}System.out.println();}System.out.println();/*---测试用---*//* int i=1;* i++;* if(i == 5){* break;}*/}}
}//Bank类
class Bank{private List<Animal> bankAnimals;private boolean hasHuman;private boolean isSafe;//构造函数public Bank(List<Animal> bankAnimals, boolean hasHuman) {this.bankAnimals = bankAnimals;this.hasHuman = hasHuman;}	//获取河岸的动物public List<Animal> getBankAnimals() {return bankAnimals;}//河岸是否有人public boolean isHasHuman() {return hasHuman;}public void setHasHuman(boolean hasHuman) {this.hasHuman = hasHuman;}//添加动物,自动设置对岸有人public void addAni(Animal animal){this.setHasHuman(true);this.getBankAnimals().add(animal);}//删除动物	public Animal removeAni(){this.setHasHuman(false);List<Animal> animals = this.getBankAnimals();Animal temp  = null;for(int i=0;i<animals.size();i++){temp = animals.get(0);animals.remove(0);if(this.noHumanisSafe()){ //执行完此岸被设置没人return temp;}else{animals.add(temp);}}return null;}//如果人离开了是否安全,执行完此岸被设置没人public boolean noHumanisSafe(){this.setHasHuman(false);if(this.bankAnimals.size() == 3){return false;}if(this.bankAnimals.size() == 2){if(this.bankAnimals.get(0).getName() == this.bankAnimals.get(1).getNaturalEnemy()||this.bankAnimals.get(1).getName() == this.bankAnimals.get(0).getNaturalEnemy()){return false;}}return true;}		
}
//动物类
class Animal{// 动物名称private String name;// 动物的天敌private String naturalEnemy;				public Animal(String name, String naturalEnemy) {this.name = name;this.naturalEnemy = naturalEnemy;}public String getName() {return name;}public String getNaturalEnemy() {return naturalEnemy;}	
}

代码经过测试,没有问题。下面是截图:


谢谢阅读,欢迎交流!

这篇关于农民带动物过河(狗猫鱼)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330438

相关文章

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

【教学类-52-08】20240905动物数独(6宫格)一页2张任务卡,一页一个动物贴图卡,有答案

背景需求: 前文提到6宫格数独的图片6*6=36图,如果将6张任务卡放在一个A4上,看上去6种动物很小,所以我换了一个word模板,变成了2张任务卡放在一个A4上。 【教学类-52-07】20240903动物数独(6宫格)一页2张任务卡,无答案-CSDN博客文章浏览阅读846次,点赞25次,收藏6次。【教学类-52-07】20240903动物数独(6宫格)一页2张任务卡,无答案https:

A*算法解决传教士—野人过河问题

A*算法解决传教士—野人过河问题 算法原理 1、A算法的基本原理分析; 在或图的一般搜索算法中,如果在搜索过程的步骤⑦利用估价函数f(n)=g(n)+h(n)对open表中的节点进行排序,则该搜索算法为A算法。 g(n):从初始节点到n的实际代价 因为n为当前节点,搜索已达到n点,所以g(n)可计算出。 h(n):启发函数,从n到目标节点的最佳路径的估计代价。 因为尚未找到解路径,所以h(n)

【精选】基于Hadoop的社区流浪动物救助领养系统的设计与实现(全网最新定制,独一无二,免费赠送文档参考)

博主介绍:     ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。 技术范围:     我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT

过河卒---记忆化搜索

题目描述 Description  如图,A 点有一个过河卒,需要走到目标 B 点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如上图 C 点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C)。卒不能通过对方马的控制点。   棋盘用坐标表示,A 点(0,0)、B 点(n,m)(n,

趣味算法------过河卒

目录 ​编辑 题目描述 解题思路 具体代码 总结 问题描述: 解决方案: 代码实现: 关键点: 题目描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示,A 点(0,0)  、B 点(n

GRE作文范文——怎样看待动物实验的利与弊

[参考范文]   Every year, millions of animals undergo painful suffering or death as a result of scientific research into the effects of drugs, food additives, cosmetics and other chemical products. Whil

<数据集>非洲动物识别数据集<目标检测>

数据集格式:VOC+YOLO格式 图片数量:1504张 标注数量(xml文件个数):1504 标注数量(txt文件个数):1504 标注类别数:4 标注类别名称:['buffalo', 'elephant', 'rhino', 'zebra'] 序号类别名称图片数框数1buffalo3795542zebra3898243elephant3837484rhino372559 使用标注工

Midjourney提示词-动物系列-65

A super cute little anthropomorphic,sheep of the Chinese Zodiac, wearing berets ,in a Hanfu in red style,standing, eyes,cute tail,super realistic,super detail,luxurious,elegant,Unreal Engine,octane re