/** 
 * 一群牛的故事 
 */  
import java.util.ArrayList;  
import java.util.List;  
/** 
 * 母牛 
 * @author dinghun8leech 
 */  
class Cow {  
    /** age 年龄 */  
    private int age;  
    /** 
     * 默认构造方法,创建(生产)一头年龄为1岁的小母牛 
     */  
    public Cow() {  
        age = 1;  
    }
    
    public Cow(int a) {  
        age = a;  
    }  
    /** 
     * 成长,母牛年龄+1 
     */  
    public void grow() {  
        ++age;  
    }  
    /** 
     * 生产,当母牛年龄在5岁或以上时产生1头小母牛 
     * 年龄低于5岁时无法生产,返回null 
     * @return Cow 一头年龄为1岁的小母牛 
     */  
    public Cow produce() {  
    
        if (age > 4) {  
            return new Cow();  
        }  
        return null;  
    }  
}  
/** 
 * 怪兽牧场 
 * @author dinghun8leech 
 */  
public class CowCount {  
    public static void main(String [] args) {  
        int year = 20;//测试年限  
        int init_cow_count = 1;//牧场起始小母牛数量  
        List<Cow> cows = new ArrayList<Cow>();//牛棚  
        for (int i=0;i<init_cow_count;i++) {  
            cows.add(new Cow(5));  
        }  
        for (int i=0;i<year;i++) {  
            int cow_count = cows.size();  
            for (int j=0;j<cow_count;j++) {//每年都遍历一下牛棚中的所有牛  
            
                Cow cow = cows.get(j);  
                
                cow.grow();//每年都会成长  
                
                Cow newCow = cow.produce();  
               
                if (newCow != null) {//看看当前年龄能否生产小牛  
                
                    cows.add(newCow);  //这里的编程技巧,cows是扩充的,用一个变量来控制下标  
                }  
                
            }  
           
        }  
        System.out.println("怪兽牧场"+year+"后的母牛数从"+init_cow_count+"头增长到"+cows.size()+"头。");  
    }  
}  结果:
怪兽牧场20后的母牛数从1头增长到907头。
改cow.grow();的位置/** 
 * 一群牛的故事 
 */  
import java.util.ArrayList;  
import java.util.List;  
/** 
 * 母牛 
 * @author dinghun8leech 
 */  
class Cow {  
    /** age 年龄 */  
    private int age;  
    /** 
     * 默认构造方法,创建(生产)一头年龄为1岁的小母牛 
     */  
    public Cow() {  
        age = 1;  
    }
    
    public Cow(int a) {  
        age = a;  
    }  
    /** 
     * 成长,母牛年龄+1 
     */  
    public void grow() {  
        ++age;  
    }  
    /** 
     * 生产,当母牛年龄在5岁或以上时产生1头小母牛 
     * 年龄低于5岁时无法生产,返回null 
     * @return Cow 一头年龄为1岁的小母牛 
     */  
    public Cow produce() {  
    
        if (age > 4) {  
            return new Cow();  
        }  
        return null;  
    }  
}  
/** 
 * 怪兽牧场 
 * @author dinghun8leech 
 */  
public class CowCount {  
    public static void main(String [] args) {  
        int year = 20;//测试年限  
        int init_cow_count = 1;//牧场起始小母牛数量  
        List<Cow> cows = new ArrayList<Cow>();//牛棚  
        for (int i=0;i<init_cow_count;i++) {  
            cows.add(new Cow(5));  
        }  
        for (int i=0;i<year;i++) {  
            int cow_count = cows.size();  
            for (int j=0;j<cow_count;j++) {//每年都遍历一下牛棚中的所有牛  
            
                Cow cow = cows.get(j);  
                                             
                Cow newCow = cow.produce();  
               
                if (newCow != null) {//看看当前年龄能否生产小牛  
                
                    cows.add(newCow);  //这里的编程技巧,cows是扩充的,用一个变量来控制下标  
                }  
                cow.grow();//每年都会成长  
            } 
            
           
        }  
        System.out.println("怪兽牧场"+year+"后的母牛数从"+init_cow_count+"头增长到"+cows.size()+"头。");  
    }  
}  
  结果:怪兽牧场20后的母牛数从1头增长到431头。
求教答案  

解决方案 »

  1.   

    蛋疼的问题啊,你自己debug跟踪一下就好了啦
    第一个方法先增加年龄,再判断是否能生小牛
    第二个方法先判断能否生小牛,然后再增加年龄。
    结果当然不一样了。
      

  2.   

    你的怪兽牧场里面  思路有点乱  这是我的代码:
    public static void main(String[] args) {
    int year = 20;
    Cow cow1 = new Cow();//初始的一头牛
    List<Cow> cows = new ArrayList<Cow>();
    cows.add(cow1);
    for(int i = 0; i < year; i++){//遍历20年~~~~~~~
    for(int j = 0;j < cows.size();j++){//每年遍历所有牛~~~~~
    Cow cownew = cows.get(j).produce();//赶进牛棚生产,看看是否生牛
    cows.get(j).grow();//每头牛每年涨一岁
    if(cownew != null){//判断这头牛是否生出小牛,生出就加到数组中
    cows.add(cownew);
    }
    }
    }
    System.out.println(cows.size());//数组中一共有多少头牛       答案         250头牛
    }
    不知道对不对,但我感觉思路是这样的~~~~~~~~~~~
      

  3.   


    package com.success.cow;import java.util.ArrayList;   
    /**  
     * 母牛类 
     */   
    public class Cow {   
        private int age = 0;       public Cow(int age) {   
            this.age = age;   
        }       public void happyBirthday(ArrayList<Cow> cows) {
            age++;   
            if (age >= 4) {   
                cows.add(new Cow(0));   
            }   
        }   
    }      
    package com.success.cow;import java.util.ArrayList;    
    public class Mooooo {   
        public static void main(String[] args) {   
            ArrayList<Cow> cows = new ArrayList<Cow>();
            cows.add(new Cow(4));   
       
            for (int i = 0; i < 20; i++) {   
                ArrayList<Cow> newCows = new ArrayList<Cow>();
                for (Cow cow : cows) {   
                    cow.happyBirthday(newCows);   
                }   
                cows.addAll(newCows);               if(i == 4) {
                 System.out.println(cows.size());
                }
            }   
       
            System.out.println("二十年共有牛 " + cows.size() + " 头。");   
        }   
    }7
    二十年共有牛 907 头。
    这是另一个解决方案 看起来也对, 答案也是907头,你的方案看起来对,但是结果我感觉不对
      

  4.   


    对了是这样的,在你的代码中Cow cow1 = new Cow();//初始的一头牛初始的是一头一岁的牛,它必须到四年后才能生小牛,应该改为这样Cow cow1 = new Cow(5);//初始的一头牛
    这样最后的结果就变成了907头