我必须编写一个程序,使用数组代表100名学生打开或关闭100个储物柜。从学生1开始,如果学生编号是储物柜编号的一个因素,则每个学生必须更改储物柜位置(如果关闭则打开,如果打开则关闭)。例如,学生3将改变储物柜3,6,9等的位置......
public class LockerFun {
public static void main (String[] args) {
int[] lockers = new int[101];
int[] students = new int[101];
for (int i = 1; i < lockers.length; i++) {
lockers[i] = 1;
}
for (int i = 1; i < students.length; i++) {
System.out.print( i + " ");
for (int j = 1; j < lockers.length; j++) {
if (j % i == 0) {
lockers[i] *= -1;
}
}
}
System.out.println();
for (int i = 1; i < lockers.length; i++) {
if (lockers[i] == -1) {
System.out.print( "O ");
}
else {
System.out.print( "X ");
}
}
}
}
// 1 = closed, -1 = open
某处我的逻辑存在缺陷,因为最终的结果应该是每个更衣室号码,一个完美的方块被打开,其余的都被关闭。我哪里出错了?我的朋友说了一些关于为储物柜使用布尔值的事情,但我不知道这会如何改变结果
答案 0 :(得分:2)
您应该注意以下几点:
您的代码更正如下:
public class LockerFun {
public static void main(String[] args) {
final int numberOfStudents = 100;
boolean[] lockers = new boolean[101];
for (int i = 1; i < lockers.length; i++)
lockers[i] = true;
for (int i = 1; i <= numberOfStudents; i++) {
System.out.print(String.format("%4d", i));
for (int j = 1; j < lockers.length; j++) {
if (j % i == 0) {
lockers[j] = !lockers[j];
}
}
}
System.out.println();
for (int i = 1; i < lockers.length; i++) {
if (lockers[i])
System.out.print(String.format("%4s", "X"));
else
System.out.print(String.format("%4s", "O"));
}
}
}
我希望能帮助你。
答案 1 :(得分:1)
一个错误 - 在您的内循环中,您更改了lockers[i]
而不是lockers[j]
但为什么不让内部for
循环只包含特定数字3, 6, 9...
?它会使代码更简单,例如。
for (int j = i; j < lockers.length; j += i) {
lockers[j] *= -1;
}
答案 2 :(得分:0)
在打开和关闭储物柜的方法中:
for (int i = 1; i < students.length; i++) {
System.out.print( i + " ");
for (int j = 1; j < lockers.length; j++) {
if (j % i == 0) {
lockers[i] *= -1;
}
}
}
这一行需要引用储物柜索引,而不是学生,即
lockers[j] *= -1;