千家信息网

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

发表于:2024-09-28 作者:千家信息网编辑
千家信息网最后更新 2024年09月28日,今天就跟大家聊聊有关如何理解Java农夫过河问题的继承与多态实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。题目描述:一个农夫带着一匹狼、一
千家信息网最后更新 2024年09月28日如何理解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安全错误 数据库的锁怎样保障安全 汇智网络技术 爱思助手能备份app数据库 数据库外键怎么设置语句 网络安全问题和个人对策 轻量云服务器入站规则 数据库查询每个值的前5条数据 网络安全方面的教育是什么 服务器永梦怎么设置性别 未成年人网络安全教育总结 网络安全教育总结150字 对折伴奏软件开发 q170支持服务器cpu么 微信小程序的数据库怎么成表 北信源真正网络安全龙头 对等网络技术的研究 学习网络安全与执法怎么样 防火墙云服务器 广州智慧安全文化展厅软件开发 嵌入式kv数据库 海珠区数据网络技术开发展示 数据库用于储存学习资料 hp 服务器登录管理口老闪退 心电分析软件开发 怎样优化sql数据库索引 一个软件开发包括什么文件 阴阳师服务器开服顺序2017 堡垒机连数据库为什么不是对应的 单打独斗怎么解决网络安全问题 软件开发结转成本会计处理 地方志数据库华中
0