Hi! I am new to Java and have been trying for a month to get the following code to work. I am trying to write the code for a guessing game where users have to guess characters of a hidden word. I have completed a Player class that seems to compile fine, but my other class Guesser does not..I am not sure if it is something to do with the TreeSet I am using.. i have read the API documentation about TreeSets and think i am doing it correctly... I cannot figure out what I am doing wrong... please could someone help? I have read pages and pages of Java documentation and help books but i must be really stupid as I can't seem to understand what I am doing wrong here..

public class Player
{
private String name;
private int score;


public Player(String n)
{
name = n;
}

public String getName()
{
return name;
}

public void incrementScore()
{
score = this.getScore() + 1;
}

public int getScore()
{
return score;
}

public boolean sameScore(Player p)
{
return this.getScore() == p.getScore();
}

public String toString()
{
return name + "(" + score + " points)";
}
}



public class Guesser extends Player
{
private char guess;
private TreeSet<Character>guessedAlready;
public static final char EXIT_CHARACTER = '*';


public Guesser(String n)
{
super(n);
guess = (' ');
guessedAlready = new TreeSet<Character>();
}


//readChar returns the first character entered by a user
//after conversion to lowercase form
private char readChar()
{
Scanner sc = new Scanner(System.in);
String guessString = sc.nextLine();
String guessStringLowerCase = guessString.toLowerCase();
return guessStringLowerCase.charAt(0);
}

// isValidGuess returns true if the value of guess is valid
// (a previously unguessed, lowercase alphabet letter, or the exit character)
// otherwise it returns false.
// This method also displays an appropriate error message
// if an invalid input has been detected.
private boolean isValidGuess()
{
boolean b1 = Character.isUpperCase(guess);
boolean b2 = guessedAlready.contains(guess);
boolean b3 = guess == '*';

if ((b1==false && b2 == false) || (b3==true))
{
return true;
}
else if(b2==true)
{
System.out.println("You guessed" + guess + "already.");
return false;
}
else if(b1==true)
{
System.out.println(guess + "is not a lowercase letter.");
return false;
}
else if(b3==true)
{
System.out.println("You gave up!");
return false;
}
else
{
return false;
}
}


// inGuessedAlready returns true if the received character is
// stored in the guessedAlready structure, otherwise it returns false
private boolean inGuessedAlready()
{
if (guessedAlready.contains(guess))
{
return true;
}
else
{
return false;
}
}



// Returns the Guesser's name and a list of guessed characters
public String toString()
{
System.out.println("this.getName() + guesses" + "[" + guessedAlready + "]");
}

// This is the main method that a driver class uses.
// It returns a 'valid' character
// (EXIT_CHARACTER or lowercase and not previously guessed).
// The guess and guessedAlready variables are updated when required
public char turn()
{
if(this.isValidGuess())
{
System.out.println("Please enter a guess, or enter * to exit");
guessedAlready.add(guess);
return readChar();
}
else
{
return 0;
}
}
}