计算单词中的字符

时间:2011-10-30 03:13:06

标签: java arrays java.util.scanner

我想创建一个程序来输出单词中出现的字母数。基本上输出必须如下所示:

Please enter a word—howdy
The word howdy has five characters.
What letter would you like to guess? (enter zero to quit) a
There are 0 A’s.
What letter would you like to guess? (enter zero to quit) b
There are 0 B’s.

这是我到目前为止所得到的:

import java.util.Scanner;

public class LetterOccurence
{
  public static void main(String[]args)
  {
    Scanner input=new Scanner(System.in);
    String word;
    String letter;

    int letterNumber;

    boolean [] alphabet = new boolean [27];

    System.out.println("Please enter a word- ");
    word=input.next();

    System.out.println("The word  "+ word + " has " + word.length() + " letters\n");

    String lower = word.toLowerCase();

    for(letterNumber=0;letterNumber<lower.length();letterNumber++)
        {
            alphabet[lower.charAt(letterNumber) - 'a'] = true;
        }

    //do
    //{
    System.out.println("What letter would you like to guess? (enter 0 to quit) ");
    letter = input.next();

    if (alphabet[letter.charAt(0)-'a'] = true)
      {
        System.out.printf("There are %s's\n",letter.charAt(0));
      }
    else
      {
        System.out.printf("There are 0 %s's\n",letter.charAt(0));   
      } 

    //}while(Character.isLetter(letter.charAt(0))); 
  }
}

我现在卡住了,关于如何继续的任何想法?

3 个答案:

答案 0 :(得分:2)

首先,boolean只保留truefalse值,您无法计算它们。而不是在循环中将数组中映射到某个字符的每个元素设置为true,而不是递增计数器。

在这种情况下,您需要int而不是boolean。要打印出特定字母的出现次数,您显然只需在该数组的特定索引处打印出int值。

替代方案也是Map<Character,Integer>,而不是计算数组中特定char的索引。

编辑:正如戴夫所说,你的if陈述也被打破了。

答案 1 :(得分:1)

如果没有其他内容,则已评注的if中的do/while语句使用的是=(作业),而不是==(比较)。

你真正需要做的就是每次猜测保持一次计数,将其初始化为零,每次遇到猜测的字母时,都要增加它。

如果你在猜测之前尝试“预先”做所有工作,那么你真的不需要布尔地图,你需要一个整数的地图,每个小写字母一个,初始化为零,并且每当猜到相应的字母时递增。

你非常接近。

答案 2 :(得分:1)

你不需要alphabet的布尔数组 - 它只会告诉你单词中出现的字母,而不是每个字母中有多少字母。试试这个:

boolean [] alphabet = new boolean [27];
for(letterNumber=0;letterNumber<lower.length();letterNumber++)
{
    ++alphabet[lower.charAt(letterNumber) - 'a'];
}

然后:

System.out.printf("There are %d %s's\n",alphabet[letter.charAt(0) - 'a'], letter.charAt(0));