我必须编写一个程序,它使用数组来表示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在某个地方,我的逻辑中有一个缺陷,因为最终的结果应该是每个储物柜号码,也就是一个完美的正方形被打开,其余的被关闭。我哪里出问题了?我的朋友说过要用布尔值来存放储物柜,但我不知道这会如何改变结果。
发布于 2016-03-10 10:03:35
你应该注意几件事:
您的代码更正如下:
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"));
}
}
}我希望这对你有帮助。
发布于 2016-03-10 09:46:26
一个错误-在您的内部循环中,您更改了lockers[i]而不是lockers[j]。
但是为什么不让内部for循环只包含特定的数字呢,3, 6, 9...?它将使代码更简单。
for (int j = i; j < lockers.length; j += i) {
lockers[j] *= -1;
}发布于 2016-03-10 09:49:26
在打开和关闭储物柜的方法中:
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;https://stackoverflow.com/questions/35912716
复制相似问题