大家看看有什么更简便的方法没有,不加入个人主观思路,纯粹让程序判断。
- package com.itheima;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- public class Test9 {
- /*
- *
- * 思路:
- * 1.定义一个方法用来判断岸边是否和谐
- * 2.第一次过河,老农随机带走一个,判断岸边是否和谐,不和谐把带走的放回去
- * 3.老农从对岸返回
- * 4.老农从正岸随机带走一个到对岸,判断对岸是否和谐,不和谐则随机带走一个到正岸,判断正岸是否和谐,
- * 不和谐再随机从正岸带走一个到对岸,无限循环直到对岸和谐。
- * 5.老农从对岸返回正岸
- * 6.老农从正岸将最后一只动物带到对岸,至此全部过河。
- */
- public static void main(String[] args) {
- //此岸
- List<String> river = new ArrayList<String>();
- //初始化成员
- river.add("猫");
- river.add("狗");
- river.add("鱼");
- //对岸
- List<String> otherSide = new ArrayList<String>();
- //开始渡河
- while(otherSide.size()!=3){
- //第一次随机带走
- Random ran = new Random();
- int r = ran.nextInt(3);//随机获取0-2角标
- String aim1 = river.get(r);//获取随机角标对应的此岸动物
- river.remove(r);//带随机角标对应的动物过河
- //如果此岸和谐
- if(getTrue(river)){
- System.out.println("———传说很久很久以前———");
- System.out.println("1.农夫带["+aim1+"]>>对岸");
- System.out.println("2.农夫回到此<<岸");
- //将随机带走的动物放到对岸
- otherSide.add(aim1);
- //创建2个临时集合用于存储动物,以便取出正确方案的动物
- List<String> temp1 = new ArrayList<String>();
- List<String> temp2 = new ArrayList<String>();
- //农夫回到此岸第二次随机带走
- while(otherSide.size()!=3){
- r = ran.nextInt(2);//随机获取0-1角标
- String aim2 = river.get(r);//获取随机角标对应的此岸动物
- river.remove(r);//带随机角标对应的动物过河
- otherSide.add(aim2);//将随机带走的动物放到对岸
- temp1.add(aim2);
- //判断对岸是否和谐
- if(getTrue(otherSide)){
- //如果对岸和谐,那么temp1最后一个元素对应的一定是鱼或狗
- String aim4 = temp1.get(temp1.size()-1);
- System.out.println("3.农夫带["+aim4+"]到对>>岸");
-
- String aim5 = temp2.get(temp2.size()-1);
- System.out.println("4.农夫带【"+aim5+"】回到此<<岸");
-
- //如果对岸和谐,且狗已经被带过去了,那么这里带走的一定是鱼,反之亦然。
- if(aim4.equals("狗")){
- aim4 = "鱼";
- System.out.println("5.农夫带["+aim4+"]到对>>岸");
- }else{
- aim4 = "狗";
- System.out.println("5.农夫带["+aim4+"]到对>>岸");
- }
- System.out.println("6.农夫回到此<<岸");
-
- otherSide.addAll(river);
- System.out.println("7.农夫带"+river+"到对>>岸");
- System.out.println("——————大结局———————\r{老农泪流满面的看着一群完\r好无损的小动物,开开心心\r的相亲去了}");
- }else{
- //如果对岸不和谐
- r = ran.nextInt(2);//随机获取0-1角标
- String aim3 = otherSide.get(r);//获取随机角标对应的对岸动物
- otherSide.remove(r);//将随机角标对应的对岸动物带回此岸
- river.add(aim3);//将随机角标对应的对岸动物放到此岸
- temp2.add(aim3);//如果对岸和谐,那么temp2中最后一个元素一定是猫
- }
- }
- //如果此岸不和谐
- }else{
- river.add(aim1);
- }
- }
- }
- //判断岸边是否和谐
- public static boolean getTrue(List<String> list) {
-
- if((list.contains("猫")&&list.contains("狗"))||(list.contains("猫")&&list.contains("鱼"))){
- return false;
- }else{
- return true;
- }
- }
-
- }
复制代码 |