8件益智游戏的运行时错误

时间:2014-12-09 20:14:36

标签: java swing

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

}

2 个答案:

答案 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';