Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Array Required, but java.lang.String found

Tags:

java

I'm trying to hide a random word which I retrieved from a list in a text file, but the code keeps giving me the following error: 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);
}

}

Okay there's the whole code< the error is now on line 151 and 149... I've also tried to fix it according to one of the posts

like image 202
Jaun Lloyd Avatar asked Aug 22 '12 16:08

Jaun Lloyd


2 Answers

You can't use array subscripts: [], to index into a String, and both hidden and original are Strings.

You can instead use original.charAt(i) to read a character at an index.

As for writing a character at an index: java Strings are immutable, so you can't change individual characters. Instead make hidden a StringBuilder, or simply a 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;
}

And then your loop can use original.charAt like so:

if (this.original.charAt(i) == input)
{
    found = true;
    this.hidden[i] = this.original.charAt(i);
like image 67
pb2q Avatar answered Sep 23 '22 23:09

pb2q


1. As you are using original.length() its a String, as length() method works with String, not with Array, as for array, length is an Instance variable.

2. Try it like this....

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

3. And as char is Not an object but a primitive, use "=="

  if (this.original[i] == input)
like image 37
Kumar Vivek Mitra Avatar answered Sep 26 '22 23:09

Kumar Vivek Mitra