Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Java Java Objects Creating the MVP Counting Scrabble Tiles

Andrei Oprescu
Andrei Oprescu
9,547 Points

This question is confusing, help.

Currently I have this question:

Now in your new method, have it return a number representing the count of tiles that match the letter that was passed in to the method. Make sure to check Example.java for some example uses.

And I have this code for it:

public class ScrabblePlayer { // A String representing all of the tiles that this player has private String tiles;

public ScrabblePlayer() { tiles = ""; }

public String getTiles() { return tiles; }

public void addTile(char tile) { tiles += tile; }

public boolean hasTile(char tile) { return tiles.indexOf(tile) != -1; }

public int getCountOfLetter(char letter) { int countOfTiles = 0; for (int tiles : letter.toCharArray()) { if (tiles.IndexOf(letter) != -1) { countOfTiles++; } } return countOfTiles; }

}

it always says char cannot be dereferenced on line 23 (for (int tiles : letter.toCharArray()) {):

can you tell me how I can fix this and what it means?

Andrei.

ScrabblePlayer.java
public class ScrabblePlayer {
  // A String representing all of the tiles that this player has
  private String tiles;

  public ScrabblePlayer() {
    tiles = "";
  }

  public String getTiles() {
    return tiles;
  }

  public void addTile(char tile) {
    tiles += tile;
  }

  public boolean hasTile(char tile) {
    return tiles.indexOf(tile) != -1;
  }

public int getCountOfLetter(char letter) {
  int countOfTiles = 0; 
  for (int tiles : letter.toCharArray()) {
    if (tiles.IndexOf(letter) != -1) {
      countOfTiles++;
    }
  }
  return countOfTiles;
 }


}
Example.java
// This code is here for example purposes only
public class Example {

  public static void main(String[] args) {
    ScrabblePlayer player1 = new ScrabblePlayer();
    player1.addTile('d');
    player1.addTile('d');
    player1.addTile('p');
    player1.addTile('e');
    player1.addTile('l');
    player1.addTile('u');

    ScrabblePlayer player2 = new ScrabblePlayer();
    player2.addTile('z');
    player2.addTile('z');
    player2.addTile('y');
    player2.addTile('f');
    player2.addTile('u');
    player2.addTile('z');

    int count = 0;
    // This would set count to 1 because player1 has 1 'p' tile in her collection of tiles
    count = player1.getCountOfLetter('p');
    // This would set count to 2 because player1 has 2 'd'' tiles in her collection of tiles
    count = player1.getCountOfLetter('d');
    // This would set 0, because there isn't an 'a' tile in player1's tiles
    count = player1.getCountOfLetter('a');

    // This will return 3 because player2 has 3 'z' tiles in his collection of tiles
    count = player2.getCountOfLetter('z');
    // This will return 1 because player2 has 1 'f' tiles in his collection of tiles
    count = player2.getCountOfLetter('f');
  }
}
Oliver Hull
Oliver Hull
845 Points

you are trying to iterate over 'letter', which is a char. It looks like you want to iterate over 'tiles' instead

2 Answers

Kyle Shifflett
Kyle Shifflett
8,496 Points

Yeah, looks like you need String tiles. You can't iterate over one char, or at least it's not what the problem is asking.

public int getCountOfLetter(String tiles) {
  int countOfTiles = 0; 
  for (int tiles : letter.toCharArray()) {
    if (tiles.IndexOf(letter) != -1) {
      countOfTiles++;
    }
  }
  return countOfTiles;
}
Andrei Oprescu
Andrei Oprescu
9,547 Points

kyle Shifflett,

Are you sure you code is correct?

It gives me 5 errors:

JavaTester.java:127: error: incompatible types: Character cannot be converted to String int actual = player.getCountOfLetter(entry.getValue()); ^ ./ScrabblePlayer.java:23: error: cannot find symbol for (int tiles : letter.toCharArray()) { ^ symbol: variable letter location: class ScrabblePlayer ./ScrabblePlayer.java:23: error: variable tiles is already defined in method getCountOfLetter(String) for (int tiles : letter.toCharArray()) { ^ ./ScrabblePlayer.java:24: error: cannot find symbol if (tiles.IndexOf(letter) != -1) { ^ symbol: variable letter location: class ScrabblePlayer ./ScrabblePlayer.java:24: error: int cannot be dereferenced if (tiles.IndexOf(letter) != -1) { ^ Note: JavaTester.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 5 errors

Can you please update you answer?

thank you.

Hey,

You could try this instead:

public int getCountOfLetter(String tiles) { int countOfTiles = 0; for (int letter1 : tiles.toCharArray()) { if (letters1 == letters) { countOfTiles++; } } return countOfTiles; }