我应该有两个输入:一个是字符,另一个是字符串。
我必须编写一个程序,输出字符在字符串中出现的次数。
最后,我能够让程序显示字符输入在字符串中出现的适当次数。
但是问题是,如果需要,我必须能够输出输入字符的复数形式。我不知道我在这里做错了什么,但有时它会使一些不应该是复数的东西。。。基本上,如果单词中有0N,它应该显示0N。。。但它显示的是0 n。
对不起,如果我的描述很糟糕。
import java.util.Scanner;
public class LabProgram {
public static void main(String[] args) {
Scanner scnr = new Scanner (System.in);
char userLetter;
String userWord;
userLetter = scnr.next().charAt(0);
userWord = scnr.nextLine();
int wordCount = 0;
for (int i = 0; i < userWord.length(); i=i+1) {
if (userWord.charAt(i) == userLetter){
wordCount = wordCount + 1;
}}
if (wordCount < 2) {
System.out.println(wordCount + " " + userLetter);
}
else if (wordCount == 0) {
System.out.println(wordCount + " " + userLetter);
}
else {
System.out.println(wordCount + " " + userLetter + "'s");
}
}
}
3条答案
按热度按时间new9mtju1#
避免任何分支的备选方案之一是始终附加“
(s)
“最后:正如stephen c提到的,撇号“
‘
,虽然有时用在你所拥有的意义上,但通常表示拥有,如n的长度,甚至n的频率。这给我带来了更多的选择:或
除了多元化问题之外,值得注意的是,在执行这一行之后:
在输入源中留下一个尾随的新行。这是一个微妙但最常见的编程错误之一。执行下一行时:
它读入尾随的新行并忽略您的第二个输入和
nextLine()
返回带空格的字符串。您可以通过打印userLetter
及userWord
到控制台。将前一行更改为:
这将使用带有尾随换行符的输入,而不会留下任何痕迹。
9gm1akwq2#
不可生产
正如查理·阿姆斯特朗(charlie armstrong)所评论的,你的问题是不可复制的。你应该提供一个mcve。
你的
if
级联有故障。第一if
测试wordCount
少于两个。零小于二。因此,第一个测试成功,其代码运行。
你的第二个
if
小于零的测试是冗余的。那一秒if
:…永远不会执行一次命令
wordCount
0或1的。第一次测试if (wordCount < 2) {
一段时间内都是这样wordCount
零(或一),因此System.out.println
将运行,并且if
瀑布结束。所以我们从来没有机会测试计数是否为零。对于“如果该单词中有0个n,则应显示0个n”的规则,请将代码更改为:
正如stephen c所评论的,您应该将复数与零和多个一连用。因此,如果计数不是一,则可以减少逻辑,在这种情况下,可以附加复数
s
. 请参阅下面这个答案中的代码示例。顺便说一下,我们可以通过让java通过
Collections.frequency
. 继续读下去。避免煤焦
这个
char
类型已过时,无法表示unicode中定义的一半字符。unicode码点
相反,学习在处理单个字符时使用unicode代码点整数。
你可以把一根绳子变成一根绳子
IntStream
获得一系列int
值,每个值都是该字符串中字符的代码点。呼叫
boxed
要转换每个流媒体int
原始的Integer
对象频率=2
如果结果不是一,则追加s
报告结果。
正如stephen c所评论的,在正确的英语中,你的目标字母应该用引号括起来,最好是 curl 的引号,不使用任何撇号。附加
s
对于零或多个计数,但忽略s
为了一个结果。请在ideone.com上查看此代码的实时运行。
2'a
sqyvllje3#
我试图遵循一些建议的解决方案,但它们对我无效,我设法找到了另一个可能符合您意图的解决方案: