数组修正不正确

时间:2017-06-30 03:15:45

标签: java arrays

因此我们遇到了一个问题:

  

编写一个模仿邮件进行实验的程序   翻转邮箱。翻盖意味着如果邮箱关闭则打开邮箱,   并在邮箱打开时关闭邮箱。有100个邮箱编号   所有最初都关闭的1到100。

     

在第一步中,访问每个邮箱(即邮箱1,2,3,   ......,100),他把所有人都翻了。然后在第二步,访问每一个   第二个邮箱(即邮箱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");

        }
    }

我认为一切都很好,因为它确实输出了正确的输出,但我的导师告诉我,我使用了错误的数组大小&#34;。我不太明白这意味着什么。我无法联系我的教练ATM,所以我想知道我是否可以帮助解决这个错误的阵列尺寸&#34;错误。

3 个答案:

答案 0 :(得分:0)

也许你的导师打算你使用0到99而不是1到100的数组索引(尽管初始问题的措辞)并且只是认为你的数组中有一个额外的元素?

答案 1 :(得分:0)

您已创建了101个元素的数组,但不使用元素0.

boolean mailbox[] = new boolean[101];

你应该只创建100个大小。

boolean mailbox[] = new boolean[100];

然后从元素0(第一个元素)循环到99(第100个)。

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

但是当你打印索引时,添加一个索引,将其更正回到人类喜欢的1到100范围,而不是计算机更喜欢的0个相对索引。

System.out.print((k+1) + " " );

不要忘记调整该循环范围..

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

答案 2 :(得分:0)

数组的大小应为100而不是101.此外,您需要将for循环更改为从0开始而不是1.因此,条件将更改为{ {1}}。

目前你没有使用数组的第一个元素因为你在i < 100开始循环。