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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题,输入大于40的时候每次都出错
下面是代码

  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3. class Rabbit //创建兔子类
  4. {  
  5.         int age; //成员变量:兔子年龄
  6.        
  7.         public Rabbit() //构造函数
  8.         {
  9.                 age=0;//初始化兔子的年龄
  10.         }
  11.        
  12.         public void setAge()//成员函数:设置兔子的年龄
  13.         {
  14.         age++;//年龄递增
  15.         }
  16.        
  17.         public int getAge()//成员函数:获取兔子的年龄
  18.         {
  19.                 return age;
  20.         }
  21.         public Rabbit born()//成员函数:兔子出生
  22.         {
  23.                 return new Rabbit();//创建一个兔子对象并返回
  24.         }
  25. }
  26. public class Test1 {
  27.         public static void main(String[] args)
  28.          {   
  29.                 Scanner sc=new Scanner(System.in);//创建系统输入流对象
  30.                 String temp;
  31.                 int monthNum;
  32.                 boolean run=true;
  33.                 while(run)
  34.                 {
  35.                         System.out.println("请输入月份或exit退出:");
  36.                         temp=sc.nextLine();
  37.                    if(temp.trim().equals("exit"))//判断去除首尾空格的字符是否是exit,如果是就结束程序
  38.                         {
  39.                                 System.out.println("系统退出了");
  40.                                 System.exit(0);
  41.                         }
  42.                         else //否则把输入的字符去除首尾空格并转换为int类型,调用getNum函数并将转换后的值传入
  43.                         {
  44.                                 monthNum=Integer.parseInt(temp.trim());
  45.                                 System.out.println(getNum(monthNum)); //输出结果
  46.                         }  
  47.                  }   
  48.         }
  49.         public static int getNum(int m) //定义一个获取兔子数量的函数
  50.         {
  51.                 int num=1;
  52.                 ArrayList rabbitArray=new ArrayList();//创建兔子数组
  53.                 rabbitArray.add(new Rabbit()); //向数组内添加一对兔子
  54.                 for(int x=1; x<=m; x++) //定义外层for循环,条件是x的值要小于传入的月数值
  55.                 {
  56.                         for(int y=0; y < rabbitArray.size(); y++)//定义内层for循环,条件是y的值要小于数组的长度
  57.                         {
  58.                                 ((Rabbit) rabbitArray.get(y)).setAge();//每循环一次就将数组中的兔子的年龄都+1
  59.                                 if(((Rabbit) rabbitArray.get(y)).getAge() >= 3)//如果兔子的年龄>=3那就再给数组中添加一对兔子
  60.                                         rabbitArray.add(((Rabbit) rabbitArray.get(y)).born());
  61.                          }
  62.                 }
  63.                 num=rabbitArray.size();//循环结束后数组中的成员个数就是兔子的数量
  64.                 return num; //返回兔子数量
  65.         }
  66. }
复制代码

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

1 个回复

倒序浏览
这种算法每有一只兔子就新建一个对象,当月份是40的时候,得有102334155个对象,我猜这时候内存溢出了吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马