我正在尝试制作一些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++) {

10-06 06:25