2010-10-14 2 views
0

Ошибка при работе с моим кодом. Я не могу получить массив символов (myArray) для отображения в графическом интерфейсе. Когда он работает правильно, я должен отображать массив, если буквы используются позже, мне нужно повторно отобразить массив с пропущенными буквами. Продолжайте это до тех пор, пока массив букв не будет пуст. Я разместил в кавычках инструкции для назначения. В настоящее время я работаю с Eclipse.Проблемы с Java и GUI

Разработка игры - на базе «Wordmole» показать пользователю сетку букв (читай из файла). Пусть пользователь вводит слово , используя диалог ввода. Если введенное слово является действительным, то проверьте, все ли буквы слова отображаются в сетке. else используйте сообщение диалог для отображения сообщения об ошибке. Если все буквы этого слова находятся в сетке , тогда наградите игрока соответствующими точками для слова, а удалите письма из опоясывающего. else используйте диалоговое окно с сообщением, чтобы сообщить пользователю слова нет. Пусть игрок продолжает играть до тех пор, пока пользователь не выйдет из игры , не введя ни слова, ни нажав кнопку отмены. В сетке нет других букв.

import java.awt.GridLayout; 
//import java.util.StringTokenizer; 

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class Project2 { 
    public static String inputWord; 
    public static String matrix = "Words\n\n"; 
    public static String total = "Total\n\n"; 
    public static String newWord; 
    public static char[][] myArray; 

public static void main(String[] args){ 

    myArray = fillArray("project2a.txt"); 


    while(true){ 
     int count = 0; 
     int sum = 0; 
     inputWord = JOptionPane.showInputDialog(null,"Enter a word:"); 
     if(inputWord == null || inputWord.length() == 0) break; 
     newWord = inputWord.toUpperCase(); 

     if(IsValidWord(newWord)){ 
      for(int x = 0; x < newWord.length(); x++){ 

       for(int i = 0; i < 10; i ++){ 
        for(int j = 0; j < 10; j++){ 
         if(newWord.charAt(x) == myArray[i][j]) count++; 
        } 
       } 
      } 

      if(count == newWord.length()){ 
       for(int c = 0; c < newWord.length(); c++) 
        sum += scoreValue(newWord.charAt(c)); 

       for(int x = 0; x < newWord.length(); x++){ 

        for(int i = 0; i < 10; i ++){ 
         for(int j = 0; j < 10; j++){ 
          if(newWord.charAt(x) == myArray[i][j]) myArray[i][j] = (' '); 
         } 
        } 
       } 
       matrix = matrix + newWord + "\n"; 
       total = total + sum + "\n"; 
      } 
      else 
       JOptionPane.showMessageDialog(null,"The word is not there!!!"); 




      } // IF 

     else 
      JOptionPane.showMessageDialog(null,"ERROR: The word is invalid!!!"); 

     } //while 
    createAndShowGUI(); 
} 

public static char[][] fillArray(String myFile){ 
    TextFileInput tfi = new TextFileInput(myFile); 
    String line = tfi.readLine(); 
    System.out.println(line); 
    int rows, cols; 
    rows = Integer.parseInt(line); 
    cols = Integer.parseInt(line); 

    char[][] rtn = new char[rows][cols]; 

    for(int i=0; i < rows; i++) { 
     line = tfi.readLine(); 
     System.out.println(line); 
     for(int j= 0; j < cols; j++) { 
      rtn[i][j] = line.charAt(j); 

     } // For 
    } // For 
    return rtn; 
} // FillArray 

public static boolean IsValidWord(String myWord){ 
    for(int i = 0; i < myWord.length(); i++) 
     if(!Character.isLetter(myWord.charAt(i))) return false; 
    return true; 
} // IsValidWord 

public static int scoreValue(char letters){ 
    if(Character.isLetter(letters)){ 
     if(letters == 'A' || letters == 'E' || letters == 'I' || letters == 'O' || letters == 'U') 
      return 0; 
     else if(letters == 'K' || letters == 'V' || letters == 'F' || letters == 'W') return 5; 
     else if(letters == 'X' || letters == 'Q') return 10; 
     } // If statement 
    return 1; 

    } // scoreValue 

public static void createAndShowGUI() { 
    //Create and set up the window. 
    JFrame frame = new JFrame("Word Game"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(100,100);//width, height); 
    frame.setLocation(200,200);//x, y); 
    frame.setLayout(new GridLayout(1,2)); 

    JTextArea textArea = new JTextArea(5, 20); 
    JTextArea textArea1 = new JTextArea(5, 20); 
    textArea.setEditable(false); 
    textArea1.setEditable(false); 
    JScrollPane scrollPane = new JScrollPane(textArea); 
    JScrollPane scrollPane2 = new JScrollPane(textArea1); 
    frame.getContentPane().add(scrollPane); 
    frame.getContentPane().add(scrollPane2); 

    textArea.setText(matrix); 
    textArea1.setText(total); 

    //Display the window. 
    frame.pack(); 
    frame.setVisible(true); 


}// createAndShowGUI 

public static void createAndShowGUI2() { 
    //Create and set up the window. 
    JFrame frame = new JFrame("Letters"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(100,100);//width, height); 
    frame.setLocation(200,200);//x, y); 
    frame.setLayout(new GridLayout(1,2)); 

    JTextArea textArea = new JTextArea(5, 20); 
    textArea.setEditable(false); 
    JScrollPane scrollPane = new JScrollPane(textArea); 
    frame.getContentPane().add(scrollPane); 

    textArea.setText(myArray); 


    //Display the window. 
    frame.pack(); 
    frame.setVisible(true); 


}// createAndShowGUI 
} 
+2

Было бы легче ответить на ваш вопрос, если вы удалили весь код, но часть, которую вы испытываете проблемы с. Нам не нужно видеть вашу логику игры. – jjnguy

+0

В будущем попытайтесь реализовать фрагменты своего кода независимо (и постепенно) и протестировать каждую часть, прежде чем соединять их. Трудность отладки программы растет экспоненциально, чем больше кода вы пишете перед его тестированием. –

ответ

1

JTextComponent SetText получает строку в то время как вы передаете многомерный массив символов. Я не совсем уверен, что вы пытаетесь сделать, но попытайтесь придумать подход, чтобы превратиться в строку перед отображением. Помните, что класс String имеет конструктор, который принимает массив char;)

+0

Будет ли лучший подход использовать copyValueOf? –

0

Итак, попробуйте инициализировать textArea с массивом, если вы посмотрите на api для JTextArea, у него есть метод setText (String someText), который не будет работать если вы передаете массив. Я удивлен, что eclipse не помешало это как ошибку для вас. Таким образом, вам нужно будет обойти свой массив символов и установить поля, используя insert (string, position), см. Api. Соедините это с ответом shendrics о создании строки из массива char, и вы должны быть настроены на работу.

JTextArea Api

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