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
中做了什么。