基本上我有一个2D拼图,它表示为4x4整数数组。数组初始化为整数0..15我必须实现方法:
public static void play(int[][] puzzle)
方法应该将4x4整数数组作为其参数,该数组表示拼图被加扰后的拼图。该方法应该使用重复的循环来实现: 1.打印拼图的当前状态 2.要求玩家输入旋转命令 3.执行播放器请求的旋转 一旦谜题回到其原始未加扰状态,循环应该终止,这意味着它必须按照数字0到15的顺序返回到原始谜题。
当发生这种情况时,程序应显示祝贺消息。
该程序应包括用户输入验证。
每当用户输入无效时,程序应该打印警告无效输入! 如果用户输入采用行或列旋转两个命令之一的形式,则该用户输入有效。
拼图的模板是:
public class Puzzle {
public static final int N = 4;
public static final int NUMBER_OF_ROTATIONS = 5;
public static void main(String[] args) {
int[][] puzzle = new int[N][N];
reset(puzzle);
test(puzzle);
reset(puzzle);
scramble(puzzle);
System.out.println("### Testing puzzle game play\n");
play(puzzle);
}
public static void print(int[][] puzzle) {
for (int[] row : puzzle) {
for (int elem : row) {
System.out.printf("%4d", elem);
}
System.out.println();
}
System.out.println();
}
public static void test(int[][] puzzle) {
System.out.println("### Testing reset method\n");
print(puzzle);
System.out.println("### Testing rotate methods\n");
print(puzzle);
for (int i = 0; i < N; i++) {
System.out.println("### rotateColumn(" + i + ")\n");
rotateColumn(puzzle, i);
print(puzzle);
System.out.println("### rotateRow(" + i + ")\n");
rotateRow(puzzle, i);
print(puzzle);
}
reset(puzzle);
System.out.println("### Testing random rotations\n");
print(puzzle);
for (int i = 0; i < 5; i++){
randomRotation(puzzle);
print(puzzle);
}
}
public static void reset(int[][] puzzle) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
puzzle[i][j] = i * N + j;
}
}
public static void scramble(int[][] puzzle) {
for (int i = 0; i < NUMBER_OF_ROTATIONS; i++) {
randomRotation(puzzle);
}
}
public static void rotateRow(int[][] arr, int row) {
for (int i= arr.length-1; i>0; i--) {
int r= (int) (Math.random() * (i+1)); int[] c = arr[i];
arr [i] = arr[r];
arr[r] = c;
}
}
// TODO: Implement method as specified in assignment brief
public static void rotateColumn(int[][] arr, int column) {
}
// TODO: Implement method as specified in assignment brief
public static void randomRotation(int[][] puzzle) {
}
// TODO: Implement method as specified in assignment brief
static void play(int[][] puzzle) {
}
}
正如您所看到的,我尝试实现旋转行方法,但在运行之后,整个数组将被更改而不是指定的行。有人可以告诉我我做错了什么吗?谢谢你:)。
答案 0 :(得分:0)
试试这个:
Appendable
我测试了它,据我所知,它的效果非常好。