A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

大家看看有什么更简便的方法没有,不加入个人主观思路,纯粹让程序判断。
  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;
  5. public class Test9 {
  6.         /*
  7.          *
  8.          * 思路:
  9.          * 1.定义一个方法用来判断岸边是否和谐
  10.          * 2.第一次过河,老农随机带走一个,判断岸边是否和谐,不和谐把带走的放回去
  11.          * 3.老农从对岸返回
  12.          * 4.老农从正岸随机带走一个到对岸,判断对岸是否和谐,不和谐则随机带走一个到正岸,判断正岸是否和谐,
  13.          *   不和谐再随机从正岸带走一个到对岸,无限循环直到对岸和谐。
  14.          * 5.老农从对岸返回正岸
  15.          * 6.老农从正岸将最后一只动物带到对岸,至此全部过河。
  16.          */
  17.         public static void main(String[] args) {
  18.                 //此岸
  19.                 List<String> river = new ArrayList<String>();
  20.                 //初始化成员
  21.                 river.add("猫");
  22.                 river.add("狗");
  23.                 river.add("鱼");
  24.                 //对岸
  25.                 List<String> otherSide = new ArrayList<String>();
  26.                 //开始渡河
  27.                 while(otherSide.size()!=3){
  28.                         //第一次随机带走
  29.                         Random ran = new Random();
  30.                         int r = ran.nextInt(3);//随机获取0-2角标
  31.                         String aim1 = river.get(r);//获取随机角标对应的此岸动物
  32.                         river.remove(r);//带随机角标对应的动物过河
  33.                         //如果此岸和谐
  34.                         if(getTrue(river)){
  35.                                 System.out.println("———传说很久很久以前———");
  36.                                 System.out.println("1.农夫带["+aim1+"]>>对岸");
  37.                                 System.out.println("2.农夫回到此<<岸");
  38.                                 //将随机带走的动物放到对岸
  39.                                 otherSide.add(aim1);
  40.                                 //创建2个临时集合用于存储动物,以便取出正确方案的动物
  41.                                 List<String> temp1 = new ArrayList<String>();
  42.                                 List<String> temp2 = new ArrayList<String>();
  43.                                 //农夫回到此岸第二次随机带走
  44.                                 while(otherSide.size()!=3){
  45.                                         r = ran.nextInt(2);//随机获取0-1角标
  46.                                         String aim2 = river.get(r);//获取随机角标对应的此岸动物
  47.                                         river.remove(r);//带随机角标对应的动物过河
  48.                                         otherSide.add(aim2);//将随机带走的动物放到对岸
  49.                                         temp1.add(aim2);
  50.                                         //判断对岸是否和谐
  51.                                         if(getTrue(otherSide)){
  52.                                                 //如果对岸和谐,那么temp1最后一个元素对应的一定是鱼或狗
  53.                                                 String aim4 = temp1.get(temp1.size()-1);
  54.                                                 System.out.println("3.农夫带["+aim4+"]到对>>岸");
  55.                                                
  56.                                                 String aim5 = temp2.get(temp2.size()-1);
  57.                                                 System.out.println("4.农夫带【"+aim5+"】回到此<<岸");
  58.                                                
  59.                                                 //如果对岸和谐,且狗已经被带过去了,那么这里带走的一定是鱼,反之亦然。
  60.                                                 if(aim4.equals("狗")){
  61.                                                         aim4 = "鱼";
  62.                                                         System.out.println("5.农夫带["+aim4+"]到对>>岸");
  63.                                                 }else{
  64.                                                         aim4 = "狗";
  65.                                                         System.out.println("5.农夫带["+aim4+"]到对>>岸");
  66.                                                 }
  67.                                                 System.out.println("6.农夫回到此<<岸");
  68.                                                
  69.                                                 otherSide.addAll(river);
  70.                                                 System.out.println("7.农夫带"+river+"到对>>岸");
  71.                                                 System.out.println("——————大结局———————\r{老农泪流满面的看着一群完\r好无损的小动物,开开心心\r的相亲去了}");
  72.                                         }else{
  73.                                                 //如果对岸不和谐
  74.                                                 r = ran.nextInt(2);//随机获取0-1角标
  75.                                                 String aim3 = otherSide.get(r);//获取随机角标对应的对岸动物
  76.                                                 otherSide.remove(r);//将随机角标对应的对岸动物带回此岸
  77.                                                 river.add(aim3);//将随机角标对应的对岸动物放到此岸
  78.                                                 temp2.add(aim3);//如果对岸和谐,那么temp2中最后一个元素一定是猫
  79.                                         }
  80.                                 }
  81.                         //如果此岸不和谐
  82.                         }else{
  83.                                 river.add(aim1);
  84.                         }
  85.                 }
  86.         }
  87.         //判断岸边是否和谐
  88.         public static boolean getTrue(List<String> list) {
  89.                
  90.                 if((list.contains("猫")&&list.contains("狗"))||(list.contains("猫")&&list.contains("鱼"))){
  91.                         return false;
  92.                 }else{
  93.                         return true;
  94.                 }
  95.         }
  96.        

  97. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 很给力!

查看全部评分

1 个回复

倒序浏览
非常牛B
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马