我正在尝试制作一些Java程序。
该程序的输入为3个整数:S:开始的蚊子; K:每个蚊子生的孩子数; N:我们“调查”的天数。
亚马逊地区的每只蚊子都生活1天。第0天,我们从S蚊子开始。每个蚊子生活的一天,它只会做两件事。首先,它攻击一个人。发作后,蚊子立即生出K个蚊子,然后死亡。
程序的输出必须是在N天结束时将被攻击的人数。
例如,对于输入(1,2,12),输出必须为8191(1 + 2 + 4 + 8 + ... + 4096)。
我的尝试如下:
public class AmazMosq {
public static int reproduction(int starting, int children, int days) {
int[] mosquitos = new int[days];
mosquitos[0] = starting;
int bites = starting;
for (int i = 1; i <= days; i++) {
mosquitos[i] = mosquitos[i-1] * children;
bites += mosquitos[i];
}
return bites;
}
public static void main(String[] args) {
System.out.println("Enter the number of starting mosquitos:");
int starting = IOUtil.readInt();
System.out.println("Enter the number of children each mosquito makes everyday:");
int children = IOUtil.readInt();
System.out.println("Enter the number of days:");
int days = IOUtil.readInt();
System.out.println(reproduction(starting, children, days));
}
}
其中IOUtil.readInt()是读取输入Ints的函数。
但是,我收到此错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
at AmazMosq.reproduction(AmazMosq.java:11)
at AmazMosq.main(AmazMosq.java:34)
这是什么意思,我做错了什么?
谢谢!
最佳答案
这里:
for (int i = 1; i <= days; i++) {
您可以像这样初始化数组:
int[] mosquitos = new int[days];
因此,您可以访问0到
days - 1
之间的元素。您正在访问mosquitos[days]
循环内的元素for
,这是问题的原因,特别是在这里:mosquitos[i] = mosquitos[i-1] * children;
//^ here ^
bites += mosquitos[i];
// ^ here ^
更改为
for (int i = 1; i < days; i++) {
甚至更好:
for (int i = 1; i < mosquitos.length; i++) {