我是编程新手,目前正在学习Java作为我的第一门入门课程。下面是我在过去的一周里一直在努力的一个练习,但我不知道如何去做。有没有人能帮忙?谢谢
您需要编写一个程序,模仿邮递员进行翻转邮箱的实验。
翻转意味着如果邮箱处于关闭状态,则打开邮箱;如果邮箱处于打开状态,则关闭邮箱。
编号为1到100的100个邮箱最初都是关闭的。在第一步中,访问每个邮箱(即邮箱1、2、3、...、100),他将它们全部翻转。然后在第二步中,每隔一次访问邮箱(即邮箱2、4、6、...、100),他翻转它们。然后在第三步中,每隔三个邮箱(即邮箱3、6、9、...、99)访问一次,他翻转它们。以这种方式,他按步骤4、5、...、10、...,50,最后是第100步,直接转到第100个邮箱并将其翻转。
在此过程结束时,哪些邮箱处于打开状态?提示:设置一个布尔值数组,所有布尔值都初始化为false,表示已关闭的邮箱。然后,在1、2、3、…的步骤中,100遍历邮箱序列并切换它们。最后,打印出打开的邮箱号码(值为true)。
大家好,非常感谢您的指导。下面是我所能做的。不幸的是,我意识到如果我继续这样做,我可能不得不重复这个过程直到第99个索引。有没有更有效的方法呢?
public class Assignment {
public static void main(String[] args) {
int index;
boolean mailBoxes[] = new boolean[100];
//flip each mailbox
for(index=0; index<mailBoxes.length;index++){
mailBoxes[index] = !mailBoxes[index];
System.out.println(mailBoxes[index]);
}
for(index=1; index<mailBoxes.length;index+=2){
mailBoxes[index] = !mailBoxes[index];
System.out.println(mailBoxes[index]);
}
for(index=2; index<mailBoxes.length;index+=3){
mailBoxes[index] = !mailBoxes[index];
System.out.println(mailBoxes[index]);
}发布于 2014-08-25 14:06:22
因为这是一个赋值,所以我不会为你写任何实际的代码,而是一些pseudo-code。
方法:由于要求中只指定邮箱的打开-关闭状态,因此使用boolean (true或false)数组就可以了。
然后,您可以按以下方式进行翻转:
for i=1 to 100 increment by 1
flip(mailboxes, i)
end每一秒的翻转:
for i=2 to 100 increment by 2
flip(mailboxes, i)
end所以你可以做每一次,第二次,第三次...在另一个循环中翻转:
for j=1 to 4 increment by 1
for i=j to 100 increment by j
flip(mailboxes, i)
end
end外部循环将从1 to 4开始,内部循环可以使用j作为迭代的开始和增量值。
flip函数的职责是将输入布尔数组的值设置为相反的值:
function flip(array, index)
array[index] = !array[index]
end如果你喜欢这个想法,这里的文档将在实际实现中对你有所帮助:
的阵列工作原理
发布于 2014-08-25 13:49:05
您可以尝试使用两个列表来跟踪邮件状态。
List<MailId> read;
List<MailId> unread;当用户将邮件翻到已读时,将MailId从未读列表移至已读列表,反之亦然。
发布于 2014-08-25 14:04:51
开始之前,您将需要一个表示邮箱的boolean数组……boolean可以是true (假设是打开的)或false (假设是关闭的)。
boolean[] mailBoxes = new boolean[100];这样做的好处是,数组中的所有元素都自动设置为false!
首先仔细看看the Arrays trail,了解更多细节。
接下来,您将需要一些方法来访问每个邮箱,现在有很多方法可以做到这一点,但为了简单起见,您可以使用for-next-loop
for (int index = 0; index < mailBoxes.length; index++) {
//...
}有关更多详细信息,请查看The for Statement ...
然后你需要一些方法来改变你访问的每个邮箱的状态,也就是,改变分配的value...again,有多种方法可以做到这一点……
您可以使用if-else语句
if (mailBoxes[index]) { // is true
mailBoxes[index] = false;
} else {
mailBoxes[index] = true;
}或者,您可以更简单地使用! (not)运算符来反转该值……
mailBoxes[index] = !mailBoxes[index];这只是说mailBoxes[index]不再是现在的mailBoxes[index]了,这将会有一个很好的效果,把true变成false,反之亦然……
现在,复杂的部分是,您将需要使用至少三个for-next循环,所有循环都具有不同的incrementers...this,这就是我建议使用for-next-loop的原因
例如,第二个循环可能类似于...
for (int index = 0; index < mailBoxes.length; index += 2) {这应该会推动一个正确的方向。
此外,不要忘记使用大量的System.out.println语句来检查发生了什么;)
https://stackoverflow.com/questions/25479548
复制相似问题