我有以下代码:
import java.util.Scanner;
import java.util.Arrays;
public class Program11 {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.print("Number of lockers:");
int number = input.nextInt();
System.out.print("Show stages [y/n]?");
String show = input.next();
if(show.equals("y"))
{
for (char[] lockers : getStages(number))
{
for (char c : lockers)
{
System.out.print("" + c);
}
System.out.println();
}
}
}
public static char[][] getStages(int n){
char[] lockers = new char[n];
char[][] arrayLockers = new char[n][];
for (int i = 0; i < n; i++) {
lockers[i] = 'O';
}
for (int i = 0; i<1;i++){
arrayLockers[i] = lockers;
}
for(int i = 2; i<=n; i++){
for(int z = 1; z<n; z++){
for (int w = i-1; w <= n; w += i){
lockers[w] = 'X';
}
arrayLockers[z] = lockers;
}
}
return arrayLockers;
}
}
输出为n = 10:
> run Program11
Number of lockers: 10
Show stages [y/n]? y
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
>
更衣室问题如下: 有n个学生和n个储物柜。第一个学生打开所有储物柜。第二名学生关闭储物柜2,4,6,8,...。第三名学生关闭储物柜3,6,9,12,...这种模式会重复进行,直到所有n名学生都走了。
我的任务:
我应该显示给定n在每个阶段的储物柜。 “ X”表示关闭,“ O”表示打开。我应该只使用数组。显然,这是一次又一次地重复相同的数组,这是不正确的。我使用方法getStages返回一个多维数组“ arrayLockers”来存储每个阶段。 谁能告诉我我哪里出问题了?
预期输出为:
OOOOOOOOOO
OXOXOXOXOX
OXXXOXXXXX
OXXXOXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
OXXXXXXXXX
答案 0 :(得分:0)
您的代码存在一些问题。首先,您没有在复制前为arrayLockers
分配内存。其次,您通过使用三个for
循环(嵌套)来使逻辑复杂化。只需两个嵌套循环即可完成。另外,您正在使用数组分配,但我不确定它是否有效;因此,我使用了经常使用的System.arraycopy()
进行了更改(或者您可以使用for
循环手动进行更改)。
import java.util.*;
import java.lang.*;
import java.io.*;
class Program11 {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.print("Number of lockers:\n");
int number = input.nextInt();
System.out.print("Show stages [y/n]?\n");
String show = input.next();
if(show.equals("y"))
{
for (char[] lockers : getStages(number))
{
for (char c : lockers)
{
System.out.print("" + c);
}
System.out.println();
}
}
}
public static char[][] getStages(int n){
char[] lockers = new char[n];
char[][] arrayLockers = new char[n][];
for (int i = 0; i < n; i++) {
lockers[i] = 'O';
}
arrayLockers[0] = new char[lockers.length];
System.arraycopy(lockers, 0, arrayLockers[0], 0, lockers.length);
int cnt = 2;
for (int i = 1; i < n; i++) {
for (int j = i; j < n; j += cnt) {
lockers[j] = 'X';
}
arrayLockers[i] = new char[lockers.length];
System.arraycopy(lockers, 0, arrayLockers[i], 0, lockers.length);
cnt++;
}
return arrayLockers;
}
}