Java 8块拼图游戏的运行时错误

Java 8块拼图游戏的运行时错误,java,swing,Java,Swing,我承认,这个问题只与我的代码有关,因为它是一个运行时错误,没有给出我所希望的结果。我对java更新了,尝试制作这个游戏,用一个空白的数字交换一个数字,以便在顺序1,2,3,4,-5,6,7,8中匹配它们。到目前为止,它运行,接受我输入的数字,但不刷新电路板。如果我在文本框中输入数字1,它将刷新电路板,但电路板上没有任何更改。然后它继续向我请求另一个值 import javax.swing.*; public class EightPuzzle { public static void

我承认,这个问题只与我的代码有关,因为它是一个运行时错误,没有给出我所希望的结果。我对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];
    }

}
import javax.swing.*;
公共八级
{
公共静态void main(字符串[]args)
{
char[]grid={'1','4','3','-','6','5','2','7','8'};
char[]目标={'1','2','3','4','-','5','6','7','8'};
char move='9';
布尔值isGoal=false;
而(!isGoal){
//***********开始行动********************
int-choice=-1;
布尔有效=假;
while(valid==false){
choice=JOptionPane.showInputDialog(getGridForOutput(grid)+“\n要移动哪个磁贴?(1-8)”)。字符(0);
如果(选项=0&&grid[choice]!='-'){
移动=(字符)(选择);
有效=真;
}
}
//***********结束***************************
//***********获取平铺位置开始***************************
int位置=-1;
int i;

对于(i=0;i您的错误是计算用户输入的第一个字符的整数代码。
将整个输入与Integer.valueOf(输入)一起使用,以获取用户输入的int表示形式

String choiceText=JOptionPane.showInputDialog(getGridForOutput(grid) + "\nWhich tile do you wish to move? (1-8)");
int choice = Integer.parseInt(choiceText);

您的错误是计算用户输入的第一个字符的整数代码。
将整个输入与Integer.valueOf(输入)一起使用,以获取用户输入的int表示形式

String choiceText=JOptionPane.showInputDialog(getGridForOutput(grid) + "\nWhich tile do you wish to move? (1-8)");
int choice = Integer.parseInt(choiceText);

其他答案是正确的。您接收的输入是字符,但正在测试其整数值。您可以通过添加
System.out.println
来测试这一点,以查看
if
语句之前的选择值

您可以做的两件事是通过使用
integer.parseInt()
获取整数值,或者通过编写以下命令直接操作选择:
选项-=48;

choice-='0';

其他答案是正确的。您接收的输入是字符,但正在测试其整数值。您可以通过添加
System.out.println
来测试这一点,以查看
if
语句之前的选择值

您可以做的两件事是通过使用
integer.parseInt()
获取整数值,或者通过编写以下命令直接操作选择:
选项-=48;

choice-='0';

Tipp:您将得到更多错误,因为您使用字符作为索引。Tipp:您将得到更多错误,因为您使用字符作为索引。