最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java農(nóng)夫過河問題的繼承與多態(tài)實現(xiàn)詳解

 更新時間:2020年01月15日 09:23:21   作者:小任性嘛  
這篇文章主要介紹了Java農(nóng)夫過河問題的繼承與多態(tài)實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

題目描述:

一個農(nóng)夫帶著一匹狼、一只羊、一顆白菜要過河,只有一條船而且農(nóng)夫每次最多只能帶一個動物或物品過河,并且當農(nóng)夫不在的時候狼會吃羊,羊會吃白菜。,請設計程序,由用戶選擇角色過河,系統(tǒng)自動判斷游戲的勝負:當出現(xiàn)有生物被吃掉的時候,游戲失敗,所有角色都到了河的另一邊,游戲成功。
話不多說,直接看代碼:

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()/* 輸出農(nóng)夫、各種動物、物品的狀態(tài)(生存、位置) */
 {
 
 System.out.println("過河狀態(tài):");
 
 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("農(nóng)夫:  是否在左邊河:"+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) {
  //如果羊和狼在同一邊且農(nóng)夫在另外一邊時則羊會被吃
  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) {
  //如果羊和白菜在同一邊且農(nóng)夫在另外一邊時則白菜會被吃
  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)
 {   //如果農(nóng)夫羊狼白菜都到了河的右邊則返回1游戲成功
  return 1;
 
 }
 return 2; //其他情況則繼續(xù)進行
 }
 
 
 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則直接退出顯示游戲結(jié)果
  break;
  }
  menu();
  choice = input.nextInt();
  System.out.println("\n");
  switch(choice)
  {
  case 0: gamevoer=true;
   break;
  case 1:{
   farmer.cross_alone(); /* 農(nóng)夫獨自過河的處理 */
   //農(nóng)夫位置的判斷
   is_alive();
   show();
   m=is_win(); //m用來記錄方法的返回值0,1,2
   if(m==1) //如果m=1,則表示過河成功
   {
   win=true;//直接輸出游戲成功
   }
   break;
   
   }
  //以下情況類似
  case 2:{
   farmer.cross_wolf();/* 農(nóng)夫帶狼的處理 */
   is_alive();
   show();
   m=is_win();
   if(m==1)
   {
   win=true;
   }
   break;
  }
  case 3:{
   farmer.cross_sheep();/* 農(nóng)夫帶羊的處理 */
   is_alive();
   show();
   m=is_win();
   if(m==1)
   {
   win=true;
   }
   break;
  }
  case 4:{
   farmer.cross_cabbage(); /* 農(nóng)夫帶白菜的處理 */
   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) { //如果白菜農(nóng)夫在一邊
  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) { //農(nóng)夫右邊到左邊
  is_across_left=true;
  is_across_right=false;
  }
  
  else { //農(nóng)夫左邊到右邊
  is_across_left=false;
  is_across_right=true;
  }
  
 }
 else {  //如果白菜農(nóng)夫不在一邊則白菜無法過河
  System.out.println(cabbage.name+"不再農(nóng)夫這邊");
 }
 
 
 }
 
 public void cross_sheep() {
 
 if(sheep.is_across_left==is_across_left||sheep.is_across_right==is_across_right) { //如果羊農(nóng)夫在一邊
  
 
 
 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) { //農(nóng)夫右邊到左邊
  is_across_left=true;
  is_across_right=false;
 }
 
 else{ //農(nóng)夫左邊到右邊
  is_across_left=false;
  is_across_right=true;
 }
 }
 else {  //如果羊農(nóng)夫不在一邊則羊無法過河
  System.out.println(sheep.name+"不再農(nóng)夫這邊");
 }
 
 
 
 }
 
 public void cross_wolf() {
 
 if(wolf.is_across_left==is_across_left||wolf.is_across_right==is_across_right) { //如果狼農(nóng)夫在一邊
  
 
 
 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) { //農(nóng)夫右邊到左邊
  is_across_left=true;
  is_across_right=false;
 }
 
 else { //農(nóng)夫左邊到右邊
  is_across_left=false;
  is_across_right=true;
 }
 }
 else {  //如果狼農(nóng)夫不在一邊則狼無法過河
  System.out.println(wolf.name+"不再農(nóng)夫這邊");
 }
 
 }
 
 public void cross_alone() {
 
 if(is_across_left==false) { //農(nóng)夫右邊到左邊
  is_across_left=true;
  is_across_right=false;
 }
 
 else{ //農(nóng)夫左邊到右邊
  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;
}

首先創(chuàng)建一個物體類wuti.java,其中包括name用來說明要過河的物體, is_across_left表示在河的左邊,默認為true, is_across_right表示在河的右邊,默認為false, is_alive表示物體沒有被吃,這個類是父類,將會有3個類繼承自此類,分別是Cabbage,Sheep,Wolf類,但是這3個類中只有分別表示名字的構造方法,雖然簡單但是有利于游戲的變更,比如實驗要求的將狼,羊,白菜改為狐貍,兔子,胡蘿卜,這樣的話只需要將super.name改為需要的物體名稱就可以。
然后創(chuàng)建一個Farmer類,其中包括cross_cabbage ()方法,cross_sheep()方法,cross_wolf()方法,這3個方法分別用來表示農(nóng)夫和白菜,羊,狼過河的情況,而且農(nóng)夫必須和物體在一邊,否則會輸出提示表示物體與農(nóng)夫的位置不一樣無法進行過河。
最后創(chuàng)建一個Client類,其中包括menu()方法,show()方法,is_alive()方法,is_win()方法,menu()方法顯示一個類似菜單的選擇項,可以選擇想要過河的情況。show()方法輸出農(nóng)夫、各種動物、物品的狀態(tài)(生存、位置),如果物體過河成功則河左邊(is_across_left)顯示false河右邊(is_across_right)顯示true。is_alive()方法用來判斷羊和白菜是否被吃,如果羊和狼在同一邊且農(nóng)夫在另外一邊時則羊會被吃,如果羊和白菜在同一邊且農(nóng)夫在另外一邊時則白菜會被吃。is_win()方法判斷是否成功過河,如果羊或白菜被吃了則返回0直接退出游戲失敗,如果農(nóng)夫羊狼白菜都到了河的右邊則返回1游戲成功。
在主方法中,將m的初始值設置為2表示正在進行的情況,在while循環(huán)中如果m=0或1則直接退出顯示游戲結(jié)果,在switch語句中case0,1,2,3,4分別選擇過河的物體的情況,case中farmer.cross_alone()等類似的方法表示農(nóng)夫和物體過河的位置以及是否成功過河的情況,is_alive()方法表示判斷物體是否被吃,show()方法輸出農(nóng)夫、各種動物、物品的狀態(tài)(生存、位置),is_win()方法判斷是否成功過河。巧妙利用m的值判斷是否過河成功。

結(jié)果顯示:

可以試試。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java基于正則表達式實現(xiàn)時間日期的常用判斷操作實例

    java基于正則表達式實現(xiàn)時間日期的常用判斷操作實例

    這篇文章主要介紹了java基于正則表達式實現(xiàn)時間日期的常用判斷操作,簡單說明了正則表達式常用元字符含義并結(jié)合實例形式分析了java基于正則表達式針對常用日期時間格式的判斷操作技巧,需要的朋友可以參考下
    2017-10-10
  • Jmeter?BlazeMeter實現(xiàn)web錄制過程

    Jmeter?BlazeMeter實現(xiàn)web錄制過程

    BlazeMeter是一款與Apache JMeter兼容的chrome插件,采用BlazeMeter可以方便的進行流量錄制和腳本生成,作為接口測試腳本編寫的一個基礎,這篇文章主要介紹了Jmeter?BlazeMeter實現(xiàn)web錄制,需要的朋友可以參考下
    2021-12-12
  • 淺談springboot與微服務架構

    淺談springboot與微服務架構

    這篇文章主要介紹了淺談springboot與微服務架構,SpringBoot是由 Pivotal團隊提供的框架,其設計?的是?來簡化新Spring應?,初始搭建以及開發(fā)過程,該框架使?了特定的?式來進?配置,需要的朋友可以參考下
    2023-07-07
  • Windows Zookeeper安裝過程及啟動圖解

    Windows Zookeeper安裝過程及啟動圖解

    這篇文章主要介紹了Windows Zookeeper安裝過程及啟動圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot+RabbitMQ實現(xiàn)消息可靠傳輸詳解

    SpringBoot+RabbitMQ實現(xiàn)消息可靠傳輸詳解

    消息的可靠傳輸是面試必問的問題之一,保證消息的可靠傳輸主要在生產(chǎn)端開啟?comfirm?模式,RabbitMQ?開啟持久化,消費端關閉自動?ack?模式。本文將詳解SpringBoot整合RabbitMQ如何實現(xiàn)消息可靠傳輸,需要的可以參考一下
    2022-05-05
  • Java程序去調(diào)用并執(zhí)行shell腳本及問題總結(jié)(推薦)

    Java程序去調(diào)用并執(zhí)行shell腳本及問題總結(jié)(推薦)

    這篇文章主要介紹了Java程序去調(diào)用并執(zhí)行shell腳本及問題總結(jié),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Map集合中獲取key-value值的實現(xiàn)方法

    Map集合中獲取key-value值的實現(xiàn)方法

    這篇文章主要介紹了Map集合中獲取key-value值的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java 如何將前端傳來的數(shù)字轉(zhuǎn)化為日期

    Java 如何將前端傳來的數(shù)字轉(zhuǎn)化為日期

    這篇文章主要介紹了Java 如何將前端傳來的數(shù)字轉(zhuǎn)化為日期,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Java校驗銀行卡是否正確的核心代碼

    Java校驗銀行卡是否正確的核心代碼

    這篇文章主要介紹了Java校驗銀行卡是否正確的核心代碼,需要的朋友可以參考下
    2017-01-01
  • 解決idea中maven項目無端顯示404錯誤的方法

    解決idea中maven項目無端顯示404錯誤的方法

    這篇文章主要介紹了解決idea中maven項目無端顯示404錯誤的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12

最新評論

沅陵县| 晋江市| 荣成市| 蕲春县| 静乐县| 成都市| 正蓝旗| 汤原县| 邳州市| 鄂伦春自治旗| 呼玛县| 察雅县| 江达县| 理塘县| 电白县| 安化县| 龙岩市| 肥乡县| 台中市| 平谷区| 兴业县| 广德县| 阜康市| 荆门市| 东丰县| 伊金霍洛旗| 新乡县| 德清县| 朝阳市| 罗定市| 池州市| 贵州省| 明光市| 巴里| 镶黄旗| 图木舒克市| 尚志市| 金塔县| 常宁市| 西藏| 扶余县|