千家信息网

如何理解Java农夫过河问题的继承与多态实现

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,今天就跟大家聊聊有关如何理解Java农夫过河问题的继承与多态实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。题目描述:一个农夫带着一匹狼、一
千家信息网最后更新 2025年01月20日如何理解Java农夫过河问题的继承与多态实现

今天就跟大家聊聊有关如何理解Java农夫过河问题的继承与多态实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

题目描述:

一个农夫带着一匹狼、一只羊、一颗白菜要过河,只有一条船而且农夫每次最多只能带一个动物或物品过河,并且当农夫不在的时候狼会吃羊,羊会吃白菜。,请设计程序,由用户选择角色过河,系统自动判断游戏的胜负:当出现有生物被吃掉的时候,游戏失败,所有角色都到了河的另一边,游戏成功。话不多说,直接看代码:

package Test1;import java.util.Scanner;public class Client { static Farmer farmer = new Farmer(); public static void menu() { System.out.println("==================Please choose operation============"); System.out.println("\t==========1:Cross the river alone==========="); System.out.println("\t==========2:Cross the river with ("+farmer.wolf.name+")"+"========="); System.out.println("\t==========3:Cross the river with ("+farmer.sheep.name+")"+"============"); System.out.println("\t==========4:Cross the river with ("+farmer.cabbage.name+")"+"=========="); System.out.println("\t==========0:Quit==============="); System.out.println("==================================================="); System.out.println("Input the number(0~4):"); } public static void show()/* 输出农夫、各种动物、物品的状态(生存、位置) */ { System.out.println("过河状态:"); System.out.println(farmer.sheep.name+": 是否在左边河:"+farmer.sheep.is_across_left+ " 是否在右边河"+farmer.sheep.is_across_right+" 是否存活:"+farmer.sheep.is_alive); //如果羊过河成功则河左边显示false河右边显示true System.out.println(farmer.cabbage.name+": 是否在左边河:"+farmer.cabbage.is_across_left+ " 是否在右边河"+farmer.cabbage.is_across_right+" 是否存活:"+farmer.cabbage.is_alive); //如果白菜过河成功则河左边显示false河右边显示true System.out.println(farmer.wolf.name+": 是否在左边河:"+farmer.wolf.is_across_left+ " 是否在右边河"+farmer.wolf.is_across_right+" 是否存活:"+farmer.wolf.is_alive); //如果狼过河成功则河左边显示false河右边显示true System.out.println("农夫: 是否在左边河:"+farmer.is_across_left+" 是否在右边河"+farmer.is_across_right); } public static void is_alive() { //判断羊和白菜是否被吃 if(farmer.sheep.is_across_left==farmer.wolf.is_across_left&&farmer.sheep.is_across_right==farmer.wolf.is_across_right &&farmer.is_across_left==farmer.sheep.is_across_right&&farmer.is_across_right==farmer.sheep.is_across_left &&farmer.is_across_left==farmer.wolf.is_across_right&&farmer.is_across_right==farmer.wolf.is_across_left) { //如果羊和狼在同一边且农夫在另外一边时则羊会被吃 farmer.sheep.is_alive=false; } if(farmer.sheep.is_across_left==farmer.cabbage.is_across_left&&farmer.sheep.is_across_right==farmer.cabbage.is_across_right &&farmer.is_across_left==farmer.cabbage.is_across_right&&farmer.is_across_right==farmer.cabbage.is_across_left &&farmer.is_across_left==farmer.sheep.is_across_right&&farmer.is_across_right==farmer.sheep.is_across_left) { //如果羊和白菜在同一边且农夫在另外一边时则白菜会被吃 farmer.cabbage.is_alive=false; } } public static int is_win(){ //判断是否成功过河 if(farmer.sheep.is_alive==false||farmer.cabbage.is_alive==false) { return 0; //如果羊或白菜被吃了则返回0直接退出游戏失败 } if(farmer.is_across_right==true&&farmer.sheep.is_across_right==true&&farmer.wolf.is_across_right&&farmer.cabbage.is_across_right==true) { //如果农夫羊狼白菜都到了河的右边则返回1游戏成功 return 1; } return 2; //其他情况则继续进行 } public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); int choice = 0; int m=2; //将m的初始值设置为2表示正在进行的情况 boolean gamevoer=false,win=false; while(!gamevoer) { if(m==1||m==0) { //如果m=0或1则直接退出显示游戏结果 break; } menu(); choice = input.nextInt(); System.out.println("\n"); switch(choice) { case 0: gamevoer=true; break; case 1:{ farmer.cross_alone(); /* 农夫独自过河的处理 */ //农夫位置的判断 is_alive(); show(); m=is_win(); //m用来记录方法的返回值0,1,2 if(m==1) //如果m=1,则表示过河成功 { win=true;//直接输出游戏成功 } break; } //以下情况类似 case 2:{ farmer.cross_wolf();/* 农夫带狼的处理 */ is_alive(); show(); m=is_win(); if(m==1) { win=true; } break; } case 3:{ farmer.cross_sheep();/* 农夫带羊的处理 */ is_alive(); show(); m=is_win(); if(m==1) { win=true; } break; } case 4:{ farmer.cross_cabbage(); /* 农夫带白菜的处理 */ is_alive(); show(); m=is_win(); if(m==1) { win=true; } break; } } } if(win) { System.out.println("game over: you win !"); }else { System.out.println("game over: you lose !"); } input.close(); }}

package Test1;public class Cabbage extends wuti { public Cabbage(){ super.name="白菜"; } }

package Test1;public class Farmer{ boolean is_across_left = true ; //默认河左边为开始的一边 boolean is_across_right = false; Sheep sheep = new Sheep(); Wolf wolf = new Wolf(); Cabbage cabbage = new Cabbage(); public void cross_cabbage () { if(cabbage.is_across_left==is_across_left||cabbage.is_across_right==is_across_right) { //如果白菜农夫在一边 if(cabbage.is_across_left==false) { //白菜右边到左边 cabbage.is_across_left=true; cabbage.is_across_right=false; } else { //白菜左边到右边 cabbage.is_across_left=false; cabbage.is_across_right=true; } if(is_across_left==false) { //农夫右边到左边 is_across_left=true; is_across_right=false; } else { //农夫左边到右边 is_across_left=false; is_across_right=true; } } else { //如果白菜农夫不在一边则白菜无法过河 System.out.println(cabbage.name+"不再农夫这边"); } } public void cross_sheep() { if(sheep.is_across_left==is_across_left||sheep.is_across_right==is_across_right) { //如果羊农夫在一边 if(sheep.is_across_left==false) { //羊右边到左边 sheep.is_across_left=true; sheep.is_across_right=false; } else{ //羊左边到右边 sheep.is_across_left=false; sheep.is_across_right=true; } if(is_across_left==false) { //农夫右边到左边 is_across_left=true; is_across_right=false; } else{ //农夫左边到右边 is_across_left=false; is_across_right=true; } } else { //如果羊农夫不在一边则羊无法过河 System.out.println(sheep.name+"不再农夫这边"); } } public void cross_wolf() { if(wolf.is_across_left==is_across_left||wolf.is_across_right==is_across_right) { //如果狼农夫在一边 if(wolf.is_across_left==false) { //狼右边到左边 wolf.is_across_left=true; wolf.is_across_right=false; } else { //狼左边到右边 wolf.is_across_left=false; wolf.is_across_right=true; } if(is_across_left==false) { //农夫右边到左边 is_across_left=true; is_across_right=false; } else { //农夫左边到右边 is_across_left=false; is_across_right=true; } } else { //如果狼农夫不在一边则狼无法过河 System.out.println(wolf.name+"不再农夫这边"); } } public void cross_alone() { if(is_across_left==false) { //农夫右边到左边 is_across_left=true; is_across_right=false; } else{ //农夫左边到右边 is_across_left=false; is_across_right=true; } } }

package Test1;public class Sheep extends wuti{public Sheep(){ super.name="羊"; }}

package Test1;public class Wolf extends wuti{public Wolf(){ super.name="狼"; }}

package Test1;public class wuti {String name; boolean is_across_left = true ; boolean is_across_right = false; boolean is_alive = true;}

首先创建一个物体类wuti.java,其中包括name用来说明要过河的物体, is_across_left表示在河的左边,默认为true, is_across_right表示在河的右边,默认为false, is_alive表示物体没有被吃,这个类是父类,将会有3个类继承自此类,分别是Cabbage,Sheep,Wolf类,但是这3个类中只有分别表示名字的构造方法,虽然简单但是有利于游戏的变更,比如实验要求的将狼,羊,白菜改为狐狸,兔子,胡萝卜,这样的话只需要将super.name改为需要的物体名称就可以。然后创建一个Farmer类,其中包括cross_cabbage ()方法,cross_sheep()方法,cross_wolf()方法,这3个方法分别用来表示农夫和白菜,羊,狼过河的情况,而且农夫必须和物体在一边,否则会输出提示表示物体与农夫的位置不一样无法进行过河。最后创建一个Client类,其中包括menu()方法,show()方法,is_alive()方法,is_win()方法,menu()方法显示一个类似菜单的选择项,可以选择想要过河的情况。show()方法输出农夫、各种动物、物品的状态(生存、位置),如果物体过河成功则河左边(is_across_left)显示false河右边(is_across_right)显示true。is_alive()方法用来判断羊和白菜是否被吃,如果羊和狼在同一边且农夫在另外一边时则羊会被吃,如果羊和白菜在同一边且农夫在另外一边时则白菜会被吃。is_win()方法判断是否成功过河,如果羊或白菜被吃了则返回0直接退出游戏失败,如果农夫羊狼白菜都到了河的右边则返回1游戏成功。在主方法中,将m的初始值设置为2表示正在进行的情况,在while循环中如果m=0或1则直接退出显示游戏结果,在switch语句中case0,1,2,3,4分别选择过河的物体的情况,case中farmer.cross_alone()等类似的方法表示农夫和物体过河的位置以及是否成功过河的情况,is_alive()方法表示判断物体是否被吃,show()方法输出农夫、各种动物、物品的状态(生存、位置),is_win()方法判断是否成功过河。巧妙利用m的值判断是否过河成功。

看完上述内容,你们对如何理解Java农夫过河问题的继承与多态实现有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

农夫 右边 白菜 方法 成功 物体 情况 位置 输出 动物 物品 状态 处理 选择 其中包括 内容 多态 问题 只有 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 steam怎么显示服务器错误 路由器的软件开发用什么工具 网络安全培训标准和规范 做数据库实验的实验心得 易双网络技术怎么样 网络安全中兴 摩卡软件开发有限公司 java监听数据库变化 网络安全安全教育主题班会记录 服务器开了安全模式 手机怎么管理服务器数据库 电脑做服务器如何设置 方舟生存进化反作弊服务器 互联网金融科技蓝色值 数据库创建应用界面 连云港营销软件开发中心 哪能找到软件开发的创业者 服务器在国内的国外软件 荣耀手机在线铃声服务器繁忙 辽宁数据软件开发过程品质保障 access数据库教程全集 农发行软件开发岗要下放两年吗 学网络安全可以干嘛 手机怎么管理服务器数据库 怎么显示每天的数据库 北京锐智天地网络技术有限 互联网融通生态科技产业创业 sql收缩数据库日志文件 笔记本电脑装数据库写代码 工商电子服务器是什么意思
0