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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. <p>[hide]题目十: 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。[/hide]</p><p>import java.util.List;
  2. import java.util.ArrayList;
  3. public class Test10 {
  4.         public static void main(String[] args) {
  5.                 crossRiver();
  6.         }
  7.         public static void crossRiver()
  8.         {
  9.                 //创建ArrayList对象leftBank和rightBank分别用来存储河岸两边的动物
  10.                 List<String> leftBank = new ArrayList<String>();
  11.                 leftBank.add("fish");
  12.                 leftBank.add("cat");
  13.                 leftBank.add("dog");
  14.                 List<String> rightBank = new ArrayList<String>();
  15.                
  16.                 boolean isAtLeftBank = true;  //农夫在左岸
  17.                 String animal = ""; //老农带走的动物
  18.                
  19.                 //当左岸没有动物时循环结束
  20.                 while(!leftBank.isEmpty())
  21.                 {
  22.                         //老农在左岸,如果带走一只动物后左岸的动物有危险,则不带走,否则将动物添加到右岸中
  23.                         if (isAtLeftBank)
  24.                         {
  25.                                 for (int  i = 0; i < leftBank.size(); i++)
  26.                                 {
  27.                                         animal = leftBank.remove(i);
  28.                                         //如果剩下动物存在危险,把不能被带走的动物重新添加到原来的位置
  29.                                         if (AtRisk(leftBank))
  30.                                         {
  31.                                                 leftBank.add(i, animal);
  32.                                                 continue;
  33.                                         }
  34.                                         else
  35.                                         {
  36.                                                 rightBank.add(animal);
  37.                                                 System.out.println("老农带"+animal+"过河");
  38.                                                 break ; //跳出for循环
  39.                                         }
  40.                                 }
  41.                                 isAtLeftBank = false;
  42.                         }
  43.                         /* 老农在右岸,如果此时右岸的动物没有危险,则老农独自一人回去
  44.                          * 否则需从右岸动物中选一只带走,判断余下的动物是否危险,
  45.                          */
  46.                         else
  47.                         {
  48.                                 if (AtRisk(rightBank))
  49.                                 {
  50.                                         for (int  i = 0; i < rightBank.size(); i++) {
  51.                                                 animal = rightBank.remove(i);
  52.                                                 if (AtRisk(rightBank))
  53.                                                 {
  54.                                                         rightBank.add(i, animal);
  55.                                                         continue;
  56.                                                 }
  57.                                                 else
  58.                                                 {
  59.                                                         leftBank.add(animal);
  60.                                                         System.out.println("老农带"+animal+"回来");
  61.                                                         break;
  62.                                                 }
  63.                                         }
  64.                                 }
  65.                                 else
  66.                                 {
  67.                                         System.out.println("老农独自回来");
  68.                                 }       
  69.                                 isAtLeftBank = true;
  70.                         }
  71.                 }
  72.                 System.out.println("过河成功!");
  73.         }
  74.        
  75.         /*
  76.          * 定义AtRisk方法,判断岸边的动物是否存在危险
  77.          * 岸边同时有狗和猫,或猫和鱼时,返回true,否则返回false
  78.          */
  79.         public static boolean AtRisk(List<String> list){
  80.                 if (list.contains("dog") && list.contains("cat"))
  81.                         return true;
  82.                 else if (list.contains("fish") && list.contains("cat"))
  83.                         return true;
  84.                 else
  85.                         return false;
  86.         }
  87. }
  88. </p>
复制代码






3 个回复

倒序浏览
如果 leftBank.add("fish");leftBank.add("cat");leftBank.add("dog");几行代码的添加顺序换一下,输出的结果会不会不一样?能否用类的方法再写一下第二版代码?
回复 使用道具 举报
很好,赞一个
回复 使用道具 举报
猴赛雷哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马