这道题不难,主要是输出格式需要注意一下。这个题我用的比较死的方法,先读入一个5X5表格,接下来就是指令行,把指令行的每一个字符提取出来进行比较,操作。
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner reader = new Scanner(System.in);
int g = 0;// 游戏序号
while (reader.hasNext()) {
int e = 0;
char a = ' ';
char[][] c = new char[5][5];// 存放5行5列的方格
for (int i = 0; i < 5; i++) {
String s = reader.nextLine();
if (s.length() < 5) {
s += " ";// 如果空格在某一行的最后一个,将空格添加进去
}
char[] d = new char[5];
d = s.toCharArray();
if (d[0] == 'Z') {
a = 'Z';
break;
}
for (int j = 0; j < 5; j++) {
c[i][j] = d[j];// 把每一行读入的字符串一次存放进数组
}
}
if (a == 'Z') {
break;
}
String s1 = reader.nextLine();// 读取指令行列
for (;;) {
if (s1.charAt(s1.length() - 1) != '0') {
s1 += reader.nextLine();
} else {
break;
}// 不读到0就一直读取
}
for (int k = 0; k < s1.length() - 1; k++) {
if (s1.charAt(k) == 'A') {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (c[i][j] == ' ') {
if (i - 1 < 0) {
e = 1;
break;
}// 如果指令非法,标记e,跳出循环
c[i][j] = c[i - 1][j];
c[i - 1][j] = ' ';
e = 2;
break;// 交换完成,跳出此次循环
}
}
if (e == 2) {
e = 0;
break;
}// 还原e,继续跳出循环,执行下一个指令
if (e == 1)
break;// 直接跳出
}
if (e == 1)
break;
}
if (s1.charAt(k) == 'B') {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (c[i][j] == ' ') {
if (i + 1 > 4) {
e = 1;
break;
}
c[i][j] = c[i + 1][j];
c[i + 1][j] = ' ';
e = 2;
break;
}
}
if (e == 2) {
e = 0;
break;
}
if (e == 1)
break;
}
if (e == 1)
break;
}
if (s1.charAt(k) == 'L') {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (c[i][j] == ' ') {
if (j - 1 < 0) {
e = 1;
break;
}
c[i][j] = c[i][j - 1];
c[i][j - 1] = ' ';
e = 2;
break;
}
}
if (e == 2) {
e = 0;
break;
}
if (e == 1)
break;
}
if (e == 1)
break;
}
if (s1.charAt(k) == 'R') {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (c[i][j] == ' ') {
if (j + 1 > 4) {
e = 1;
break;
}
c[i][j] = c[i][j + 1];
c[i][j + 1] = ' ';
e = 2;
break;
}
}
if (e == 2) {
e = 0;
break;
}
if (e == 1)
break;
}
}
if (e == 1)
break;
}
if (++g>1) {
System.out.println();//连续输出之间的空行
}
System.out.println("Puzzle #" + g + ":");// 标题输出
if (e == 1) {
System.out.println("This puzzle has no final configuration.");// 非法指令输出
}
else {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == 4) {
System.out.print(c[i][j]);
break;
}
System.out.print(c[i][j] + " ");
}
System.out.println();//保持矩阵式输出
}
}
}
}
}