Java 阵列校正不正确

Java 阵列校正不正确,java,arrays,Java,Arrays,因此,我们遇到了一个问题,大致如下: 编写一个程序,模仿邮递员在计算机上进行实验 翻转邮箱。翻转意味着在邮箱关闭时打开邮箱, 以及在邮箱打开时关闭邮箱。有100个邮箱编号 1到100个,所有这些都是最初关闭的 在第一步中,访问每个邮箱(即邮箱1、2、3、, 他把它们都翻了。然后在第二步中,访问每个 第二个邮箱(即邮箱2、4、6、…、100),他翻转它们。 然后在第三步中,每三个邮箱(即邮箱)访问一次 3,6,9,…,99),他翻转它们。以这种方式,他循序渐进 4,5,…,10,…,50,最后10

因此,我们遇到了一个问题,大致如下:

编写一个程序,模仿邮递员在计算机上进行实验 翻转邮箱。翻转意味着在邮箱关闭时打开邮箱, 以及在邮箱打开时关闭邮箱。有100个邮箱编号 1到100个,所有这些都是最初关闭的

在第一步中,访问每个邮箱(即邮箱1、2、3、, 他把它们都翻了。然后在第二步中,访问每个 第二个邮箱(即邮箱2、4、6、…、100),他翻转它们。 然后在第三步中,每三个邮箱(即邮箱)访问一次 3,6,9,…,99),他翻转它们。以这种方式,他循序渐进 4,5,…,10,…,50,最后100,他直接去 打开第100个邮箱并将其翻转。在这一过程结束时 邮箱打开了吗

所以我继续做了一个程序,利用嵌套for循环来做翻转实验:

    public class MailManProblem{
        public static void main(String args[]){
            boolean mailbox[] = new boolean[101];
            int i,j,k,l;

            for(i=1;i<101;i++){
                for(j=i;j<mailbox.length;j+=i){
                    mailbox[j]=!mailbox[j];
                }
            }

            System.out.print("\nOpen Mailboxes \n");
            for(k=1;k<mailbox.length;k++){
                if(mailbox[k]==true)
                    System.out.print(k + " " );
                else
                    continue;
            }
            System.out.print("\n\n");

        }
    }
公共类邮件问题{
公共静态void main(字符串参数[]){
布尔邮箱[]=新布尔值[101];
int i,j,k,l;

对于(i=1;i也许你的导师打算让你使用从0到99的数组索引,而不是从1到100的数组索引(尽管最初问题的措辞如此),并且认为你的数组中有一个额外的元素?

你已经创建了101个大小的数组元素,但你没有使用元素0

boolean mailbox[] = new boolean[101];
你应该只创建100个大小

boolean mailbox[] = new boolean[100];
然后从元素0(第一个元素)循环到99(第100个元素)

别忘了调整循环范围

for(k=0;k<mailbox.length;k++)

for(k=0;k数组的大小应该是100而不是101。此外,您需要将
for
循环从0而不是1开始。因此,条件将更改为
i<100

目前,您没有使用数组的第一个元素,因为您在
i=1
处开始循环

System.out.print((k+1) + " " );
for(k=0;k<mailbox.length;k++)