- package com.itheima;
- import java.util.ArrayList;
- import java.util.List;
- public class Test10 {
- // 用两个集合来描述河两岸
- List<String> here = new ArrayList<String>();
- List<String> there = new ArrayList<String>();
- // 初始化猫、狗、鱼在here集合中
- public Test10() {
- here.add("Dog");
- here.add("cat");
- here.add("fish");
- }
- // 定义一个方法isSafty()判断农夫离开一岸到另一岸时,是否安全,安全的标准是狗和鱼在一起,猫被老农带走。
- public boolean isSafty(List<String> list) {
- if (list.contains("dog") && list.contains("cat")
- || list.contains("cat") && list.contains("fish")) {
- return false;
- }
- return true;
- }
- public void toTake() {
- // 获取集合中的第一个元素,如果该元素是狗或者鱼,则不安全,将该元素删除,
- //并重新运行toTake方法,这时该元素会被置换为最后一个元素,保证农夫带动物的随机性。
- // 如果该元素是猫,则将其带走。
- String str = here.get(0);
- here.remove(str);
- if (isSafty(here)) {
- System.out.println("1农夫带着" + str + "去往对岸,这边还剩下" + here + ",对岸有"
- + there);
- toThere(str);
- } else {
- here.add(str);
- toTake();
- }
- }
- public void toThere(String s) {
- // 如果河的另一边安全,则增加带来的动物
- if (isSafty(there)) {
- there.add(s);
- //当here中元素不存在时,说明三只动物都被带过河了。
- if (here.isEmpty()) {
- System.out.println("农夫," + there + "都被你带过来了");
- return;
- }
- //将猫放到对面后,再回去带其他动物
- if (isSafty(there)) {
- System.out.println("2农夫回到原点,对岸有" + there);
- toTake();
- } else {
- String temp = there.get(0);
- there.remove(temp);
- System.out.println("3农夫带着" + temp + "回到原点,这边有" + here + ",对岸有"
- + there);
- here.add(temp);
- toTake();
- }
- }
- //如果不安全,则该元素删除,重新运行toTake方法,这时该元素会被置换为最后一个元素。
- else {
- there.remove(s);
- toTake();
- }
- }
- public static void main(String[] args) {
- new Test10().toTake();
- }
- }
复制代码 |