我承认,这个问题只与我的代码有关,因为它是一个运行时错误,不能给我我希望的结果。我是Java的新手,并尝试制作这个游戏,意味着用空白部分换出一个数字,以便按顺序1,2,3,4, - ,5,6,7,8匹配它们。到目前为止,它运行,我输入一个数字,但不刷新板。如果我在文本框中输入数字1,它会刷新电路板,但其中没有任何内容发生变化。然后它继续问我另一个值。
import javax.swing.*;
public class EightPuzzle
{
public static void main(String[] args)
{
char[] grid={'1', '4', '3', '-', '6', '5', '2', '7', '8'};
char[] goal={'1', '2', '3', '4', '-', '5', '6', '7', '8'};
char move='9';
boolean isGoal=false;
while(!isGoal){
//***********GET MOVE START********************
int choice=-1;
boolean valid=false;
while(valid==false){
choice=JOptionPane.showInputDialog(getGridForOutput(grid) + "\nWhich tile do you wish to move? (1-8)").charAt(0);
if(choice<=8&&choice>=0&&grid[choice]!='-'){
move=(char)(choice);
valid=true;
}
}
//***********GET MOVE END***************************
//***********GET TILE LOCATION START***************************
int location=-1;
int i;
for(i=0;i<9;i++)
if(move==grid[i])
location=i;
//***********GET TILE LOCATION END***************************
//*********UPDATE START**************
char temp='0';
temp=(char)(location);
grid[temp]='-';
//***************GET LOCATION OF BLANK START*****************
int j=0;
for(i=0;i<9;i++)
if(grid[i]=='-')
j=i;
//***************GET LOCATION OF BLANK END*********************
grid[j]=move;
//*********UPDATE END***********
//****** IS GOAL START**********
if(grid[0]==goal[0]&&grid[1]==goal[1]&&grid[2]==goal[2]&&grid[3]==goal[3]&&grid[4]==goal[4]&&grid[5]==goal[5]&&grid[6]==goal[6]&&grid[7]==goal[7]&&grid[8]==goal[8])
isGoal=true;
//*******IS GOAL END**********
}
}
public static String getGridForOutput(char[] grid)
{
return ""+grid[0]+"\t "+grid[1]+"\t "+grid[2]+"\n"+grid[3]+"\t "+grid[4]+"\t "+grid[5]+"\n"+grid[6]+"\t "+grid[7]+"\t "+grid[8];
}
}
答案 0 :(得分:3)
您的错误是您评估用户输入的第一个字符的整数代码
使用Integer.valueOf(输入)的整个输入来获取用户输入的int表示
String choiceText=JOptionPane.showInputDialog(getGridForOutput(grid) + "\nWhich tile do you wish to move? (1-8)");
int choice = Integer.parseInt(choiceText);
答案 1 :(得分:1)
其他答案都是正确的。您正在接收输入作为字符,但正在测试其整数值。您可以通过添加System.out.println
来测试此问题,以便在if
声明之前查看选择的值。
您可以做的一件事是使用Integer.parseInt()
获取整数值,或者通过编写直接操作选项:
choice-=48;
或
choice-='0';
。