黑马程序员技术交流社区
标题:
获取兔子数量的问题:为什么输入月份大了就出错
[打印本页]
作者:
Sxxjava
时间:
2014-11-4 18:24
标题:
获取兔子数量的问题:为什么输入月份大了就出错
如题,输入大于40的时候每次都出错
下面是代码
import java.util.ArrayList;
import java.util.Scanner;
class Rabbit //创建兔子类
{
int age; //成员变量:兔子年龄
public Rabbit() //构造函数
{
age=0;//初始化兔子的年龄
}
public void setAge()//成员函数:设置兔子的年龄
{
age++;//年龄递增
}
public int getAge()//成员函数:获取兔子的年龄
{
return age;
}
public Rabbit born()//成员函数:兔子出生
{
return new Rabbit();//创建一个兔子对象并返回
}
}
public class Test1 {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);//创建系统输入流对象
String temp;
int monthNum;
boolean run=true;
while(run)
{
System.out.println("请输入月份或exit退出:");
temp=sc.nextLine();
if(temp.trim().equals("exit"))//判断去除首尾空格的字符是否是exit,如果是就结束程序
{
System.out.println("系统退出了");
System.exit(0);
}
else //否则把输入的字符去除首尾空格并转换为int类型,调用getNum函数并将转换后的值传入
{
monthNum=Integer.parseInt(temp.trim());
System.out.println(getNum(monthNum)); //输出结果
}
}
}
public static int getNum(int m) //定义一个获取兔子数量的函数
{
int num=1;
ArrayList rabbitArray=new ArrayList();//创建兔子数组
rabbitArray.add(new Rabbit()); //向数组内添加一对兔子
for(int x=1; x<=m; x++) //定义外层for循环,条件是x的值要小于传入的月数值
{
for(int y=0; y < rabbitArray.size(); y++)//定义内层for循环,条件是y的值要小于数组的长度
{
((Rabbit) rabbitArray.get(y)).setAge();//每循环一次就将数组中的兔子的年龄都+1
if(((Rabbit) rabbitArray.get(y)).getAge() >= 3)//如果兔子的年龄>=3那就再给数组中添加一对兔子
rabbitArray.add(((Rabbit) rabbitArray.get(y)).born());
}
}
num=rabbitArray.size();//循环结束后数组中的成员个数就是兔子的数量
return num; //返回兔子数量
}
}
复制代码
作者:
李天富
时间:
2014-11-4 22:32
这种算法每有一只兔子就新建一个对象,当月份是40的时候,得有102334155个对象,我猜这时候内存溢出了吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2