2011-10-30 31 views
1

我想创建一个程序来输出单词中某个字母的出现次数。 Basicaly输出必须是这样的:在一个单词中计数字符

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

你应该提到的是什么你是卡在 – Lithium

+0

呀,似乎相当接近,有什么给你一个问题吗? –

+0

你卡在什么地方? – Kev

回答

1

如果没有别的,那么您的注释do/while中的if声明使用单个=(赋值)而不是==(比较)。

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

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

你非常接近。

2

首先,boolean只保存一个truefalse的值,您不能计数。而不是在您的循环中将阵列中映射到某个字符的每个元素设置为true,您可以简单地递增计数器。

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

另一种方法是Map<Character,Integer>,而不是计算数组中特定char的索引。

编辑:正如戴夫提到的,您的if声明也被打破。

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)); 
+0

第二个例子中的if语句似乎没有必要。为什么不坚持第一条印刷说明呢? – AusCBloke

+0

是,不需要“如果”。数组应该是int [],循环可以是char c:lower.toCharArray()。 – aishwarya

+0

@AusCBloke - 好点。我相应地更改了代码。我没有看到OP在'if'中做了什么。 –

相关问题