因此我们遇到了一个问题:
编写一个模仿邮件进行实验的程序 翻转邮箱。翻盖意味着如果邮箱关闭则打开邮箱, 并在邮箱打开时关闭邮箱。有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;错误。
答案 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
开始循环。