6

我试图隐藏从文本文件的列表中检索到的随机单词,但代码不断给我以下错误:Array Required, but java.lang.String found

import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
import java.util.List;

public class Hangman extends JFrame
{
private static final char HIDECHAR = '_';
String imageName = null;
String Path = "D:\\Varsity College\\Prog212Assign1_10-013803\\images\\";
static int guesses =0;
private String original = readWord();
private String hidden;
int i = 0;
static JPanel panel;
static JPanel panel2;
static JPanel panel3;
static JPanel panel4;

public Hangman(){
JButton[] buttons = new JButton[26];

this.original = original;
this.hidden = this.createHidden();
panel = new JPanel(new GridLayout(0,9));
panel2 = new JPanel();
panel3 = new JPanel();
panel4 = new JPanel();

JButton btnRestart = new JButton("Restart");
btnRestart.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {

    }
});

JButton btnNewWord = new JButton("Add New Word");
btnNewWord.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
{
try
{
    FileWriter fw = new FileWriter("Words.txt", true);
    PrintWriter pw = new PrintWriter(fw, true);

    String word = JOptionPane.showInputDialog("Please enter a word: ");

    pw.println(word);
    pw.close();
}
catch(IOException ie)
{
    System.out.println("Error Thrown" + ie.getMessage());
}
}
});

JButton btnHelp = new JButton("Help");
btnHelp.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e)
   {
       String message = "The word to guess is represented by a row of dashes, giving the number of letters and category of the word."
               + "\nIf the guessing player suggests a letter which occurs in the word, the other player writes it in all its correct positions."
               + "\nIf the suggested letter does not occur in the word, the other player draws one element of the hangman diagram as a tally mark."
               + "\n"
               + "\nThe game is over when:"
               + "\nThe guessing player completes the word, or guesses the whole word correctly"
               + "\nThe other player completes the diagram";
       JOptionPane.showMessageDialog(null,message, "Help",JOptionPane.INFORMATION_MESSAGE);
   }
});

JButton btnExit = new JButton("Exit");
btnExit.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
        System.exit(0);
    }
});
JLabel lblWord = new JLabel(original);

if(guesses >= 0) imageName = "Hangman1.jpg";
if(guesses >= 1) imageName = "Hangman2.jpg";
if(guesses >= 2) imageName = "Hangman3.jpg";
if(guesses >= 3) imageName = "Hangman4.jpg";
if(guesses >= 4) imageName = "Hangman5.jpg";
if(guesses >= 5) imageName = "Hangman6.jpg";
if(guesses >= 6) imageName = "Hangman7.jpg";
ImageIcon icon = null;
if(imageName != null){
    icon = new ImageIcon(Path + File.separator + imageName);
}

JLabel label = new JLabel();
label.setIcon(icon);
String  b[]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
for(i = 0; i < buttons.length; i++)
{
    buttons[i] = new JButton(b[i]);

    panel.add(buttons[i]);
}

panel2.add(label);

panel3.add(btnRestart);
panel3.add(btnNewWord);
panel3.add(btnHelp);
panel3.add(btnExit);
panel4.add(lblWord);
}
public String readWord()
{
try
{
BufferedReader reader = new BufferedReader(new FileReader("Words.txt"));
String line = reader.readLine();
List<String> words = new ArrayList<String>();
while(line != null)
{
    String[] wordsLine = line.split(" ");
    boolean addAll = words.addAll(Arrays.asList(wordsLine));
    line = reader.readLine();
}
Random rand = new Random(System.currentTimeMillis());
String randomWord = words.get(rand.nextInt(words.size()));
return randomWord;

}catch (Exception e){
    return null;
}

}
private String printWord(){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < this.original.length(); i++){
    sb.append(HIDECHAR);
}
return sb.toString();
}
public boolean check(char input){
boolean found = false;
for (int i = 0; i < this.original.length(); i++){
    if(this.original.charAt(i)== input)){
        found = true;
        this.hidden[i] = this.original.charAt(i);
    }
}
return found;
}

public static void main(String[] args) 
{

    System.out.println();
    Hangman frame = new Hangman();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Box mainPanel = Box.createVerticalBox();
    frame.setContentPane(mainPanel);
    mainPanel.add(panel, BorderLayout.NORTH);
    mainPanel.add(panel2);
    mainPanel.add(panel4);
    mainPanel.add(panel3);
    frame.pack();
    frame.setVisible(true);
}

}

好的,有整个代码<错误现在在第 151 行和第 149 行...我也尝试根据其中一篇文章修复它

4

2 回答 2

17

您不能使用数组下标: [], 来索引 a String,以及两者hiddenoriginalare Strings

您可以改为使用original.charAt(i)读取索引处的字符。

至于在索引处一个字符:javaStrings是不可变的,所以你不能改变单个字符。而是制作hidden一个StringBuilder,或简单地制作一个char[]

// in your class member declarations:
char hidden[] = createHidden();

// possible implementation of createHidden:
char[] createHidden()
{
    if (original != null)
        return new char[original.length()];
    else return null;
}

然后你的循环可以original.charAt像这样使用:

if (this.original.charAt(i) == input)
{
    found = true;
    this.hidden[i] = this.original.charAt(i);
于 2012-08-22T16:06:04.117 回答
2

1.当您使用original.length()它的字符串时,因为 length() 方法适用于字符串,而不适用于Array,对于数组,长度是一个实例变量。

2.试试这样......

this.hidden[i] = original.charAt(i);

3.由于char 不是对象而是原始的,所以使用"=="

  if (this.original[i] == input)
于 2012-08-22T16:08:34.937 回答