本帖最后由 高亮亮 于 2014-1-3 21:58 编辑
这个问题有点意思.我之前做了下,跟一学霸思维不太一样,他把猫狗鱼都封装了对象,并继承动物类,做的比较符合面向对象.
我的代码面向对象痕迹不够深.发给你参考下.
- /*
- * 需求:
- * 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
- * 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。
- * 编程解决猫狗鱼过河问题。
- * 分析:
- * 定义猫,狗,鱼元素.定义两岸集合.定义方法判断不和谐状况.
- * 步骤:
- * 1.将猫狗鱼抽象为三个String型变量.将两岸抽象为两个集合.
- * 2.定义判断是否和谐方法.
- * */
- public class Test10 {
- public static void main(String[] args) {
- //开始过河.
- doTransport();
- }
- public static void doTransport() {
- // 抽象出猫,鱼,狗和两岸.
- ArrayList<String> arr1 = new ArrayList<String>();
- ArrayList<String> arr2 = new ArrayList<String>();
- arr1.add("鱼");
- arr1.add("猫");
- arr1.add("狗");
- // 农夫将要携带到船上动物.(前一字符表示农夫当前携带动物,后一字符表示上次农夫携带的动物,为了让农夫不出现重复拿同一个动物的情况)
- System.out.println("农夫,猫,鱼,狗都在此岸,开始过河.\n");
- String[] boat ={"-","-"};
- while (arr1.size() > 0) {
- move(arr1, arr2, boat);
- }
- System.out.println("\n农夫,猫,鱼,狗都到达彼岸.");
- }
- public static void move(ArrayList<String> arr1, ArrayList<String> arr2,String[] boat) {
- //农夫船上是否有动物,有则不需随机选择携带.
- if (boat[0].equals("-")) {
- int one=0;
- do{
- // 农夫从此岸随机带上一个动物.
- one = new Random().nextInt(arr1.size());
- }while(arr1.get(one).equals(boat[1]));
- boat[1]=boat[0];
- boat[0] = arr1.get(one);
- arr1.remove(one);
- }
- // 判断此岸是否和谐
- if (ifNice(arr1)) {
- // 此岸和谐,农夫则将动物送去彼岸.
- arr2.add(boat[0]);
- System.out.println("--->农夫带" + boat[0] + "去彼岸 ");
- //首先判断是否将三个动物都放彼岸,是则无需判断是否和谐.
- if(arr2.size()==3){
- return;
- }
- // 判断彼岸是否和谐.
- if (ifNice(arr2)) {
- // 彼岸和谐,农夫则完成此次运送.
- boat[1]=boat[0];
- boat[0] ="-";
- System.out.println(" 农夫单独回此岸<---");
- } else {
- // 彼岸不和谐,农夫则将岸上动物与携带动物交换.送回此岸.
- boat[0]=arr2.get(0);
- System.out.println(" 农夫带" +boat[0]+ "回此岸<---");
- arr2.remove(0);
- arr1.add(boat[0]);
- boat[1]=boat[0];
- boat[0]="-";
- }
- } else {
- // 如果此岸不和谐则放回此岸.
- arr1.add(boat[0]);
- boat[1]=boat[0];
- boat[0]="-";
- }
- }
- public static boolean ifNice(ArrayList<String> arr) {// 判断是能否共存.
- if ((arr.contains("猫") && arr.contains("狗"))
- || (arr.contains("鱼") && arr.contains("猫"))) {
- return false;
- } else {
- return true;
- }
- }
- }
-
复制代码
|