Java 字数

Java 字数,java,arrays,java.util.scanner,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

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

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))); 
  }
}
import java.util.Scanner;
公共类事件
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
字符串字;
字符串字母;
整数字母编号;
布尔[]字母=新布尔[27];
System.out.println(“请输入一个单词-”);
word=input.next();
System.out.println(“单词“+word+”有“+word.length()+”个字母\n”);
String lower=word.toLowerCase();

对于(letterNumber=0;letterNumber如果没有其他内容,则表示您在注释掉的
do/while
语句中使用单个
=
(赋值)而不是
=
(比较)

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

如果您试图在猜测之前“提前”完成所有工作,那么您实际上不需要布尔映射,您需要一个整数映射,每个小写字母一个,初始化为零,每次猜测对应的字母时递增


你很接近了。

如果没有别的,那么在你注释掉的
do/while
中的
语句使用一个
=
(赋值)而不是
=
(比较)

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

如果您试图在猜测之前“提前”完成所有工作,那么您实际上不需要布尔映射,您需要一个整数映射,每个小写字母一个,初始化为零,每次猜测对应的字母时递增


你很接近了。

首先,
布尔值
只包含一个
true
false
值,你不能用它们计数。你可以简单地增加计数器,而不是在循环中将数组中映射到某个字符的每个元素设置为
true

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

另一种方法是使用
映射
,而不是计算数组中特定
字符
的索引


编辑:正如Dave提到的,如果
语句也被破坏,
boolean
s只持有
true
false
值,你不能用它们计数。与其在循环中将数组中映射到某个字符的每个元素设置为
true
,你只需增加counter

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

另一种方法是使用
映射
,而不是计算数组中特定
字符
的索引


编辑:正如Dave提到的,您的
if
语句也被破坏。

您不希望字母表的
布尔数组--
只告诉您单词中出现了哪些字母,而不告诉您每个字母的数量。请尝试以下方法:

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

您不需要字母表的布尔数组,它只告诉您单词中出现的字母,而不告诉您每个字母的数量。请尝试以下方法:

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

你应该提到什么是你被卡住了,看起来很近,什么给了你一个问题?你应该提到什么是你被卡住了,看起来很近,什么给了你一个问题?第二个例子中的if语句似乎没有必要。为什么不坚持一行,第一个打印语句?是的,不需要“if”。数组应该是int[],循环可以是char c:lower.tocharray()。@AusCBloke-很好。我相应地更改了代码。我没有查看OP在
if
中做了什么。第二个示例中的if语句似乎没有必要。为什么不只保留第一个print语句中的一行?是的,不需要“if”。数组应该是int[],循环可以是char c:lower.tocharray()。@AusCBloke-很好。我相应地更改了代码。我没有查看OP在
if
中做了什么。