2014-12-09 2 views
0

Я признаю, что эта проблема касается только моего кода, так как это ошибка времени выполнения, которая не дает мне результатов, на которые я надеялся. Я новичок в Java и пытаюсь сделать эту игру, которая предназначена для замены номера с пустым куском, чтобы соответствовать им в порядке 1,2,3,4, -, 5,6,7,8. Пока он работает, берет мой ввод за число, но не обновляет плату. Если я введу номер 1 в текстовое поле, он обновит доску, но ничего не изменится. Затем он попросит меня получить другое значение.Ошибка времени выполнения для 8-голосовой игры с головоломкой

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

Tipp: Вы получите больше ошибок, потому что используете символы в качестве индексов. – Joachim

ответ

3

Ваша ошибка в том, что вы оцениваете целочисленный код первого символа ввода пользователя.
Используйте весь вход с Integer.valueOf (вход), чтобы получить ИНТ представление пользовательского ввода

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

Другие ответы правильны. Вы получаете ввод как символ, но проверяете его целочисленное значение. Вы можете проверить это, добавив System.out.println, чтобы увидеть значение выбора перед оператором if.

Несколько вещей, которые вы могли бы сделать, это получить целое значение с помощью Integer.parseInt() или манипулировать выбор непосредственно в письменной форме: choice-=48; или choice-='0';.

Смежные вопросы