我想创建一个程序来输出单词中出现的字母数。基本上输出必须如下所示:
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)));
}
}
我现在卡住了,关于如何继续的任何想法?
答案 0 :(得分:2)
首先,boolean
只保留true
或false
值,您无法计算它们。而不是在循环中将数组中映射到某个字符的每个元素设置为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));