我正在尝试计算字符串中连续出现字符的次数。用这个似乎无处可去: 如果你能帮助我,我将非常感激。
提前致谢:)
int totCharacters=0, vowels=0, digits=0, odds=0, consecutive=0, index=0;
String text;
char ch;
Scanner input = new Scanner(System.in);
System.out.print("Please enter a sentence terminated with a full stop or exclamation mark: ");
text = input.nextLine();
do {
ch = text.charAt(index);
if(ch=='.' && ch=='!')
break;
if(index<text.length()-1)
totCharacters++;
if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
vowels++;
if(ch>='0' && ch<='9')
digits++;
if(ch=='1' || ch=='3' || ch=='5' || ch=='7' || ch=='9')
odds++;
index++;
}while(ch!= '.' && ch!='!');
for(int i=0; i<text.length(); i++)
{
if(ch==text.charAt(i))
consecutive++;
}
答案 0 :(得分:0)
我认为问题在于它没有按照你期望的方式计算consecutive
。问题是在您浏览完所有字符后for
循环正在运行。由于ch
设置为'。'的最后一次。要么 '!'遇到了,for循环只计算所有'。'要么 '!'字符。而不只是连续的。
答案 1 :(得分:0)
我会做这样的事情。有两根弦,一根拿着所有辅音,另一根拿着所有的元音。检查其中一个字符串是否包含该字符。如果没有,那么它是标点符号或空格。代码过滤掉了空间。
String consString = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
String vowelString = "aeiouAEIOU";
for (int i = 0; i < s.length(); i++){
if (consString.contains(s.charAt(i)){
consCount++;
}
else if (vowelString.contains(s.charAt(i)){
vowelCount++;
}
else if (!Character.isWhiteSpace(s.charAt(i))
punctCount++;
}
}
您可以为任何所需的字符集执行此操作。此外,如果要计算连续数,可以保留currentChar变量并检查下一个变量是否等于它。如果是,consecutives++
答案 2 :(得分:0)
这会计算所有连续的字符(我相信,无法编译atm)。这可能不是你想要的。我可以根据连续字符的含义进行修改。连续都?最高连续?
我在do中移动了for循环,以便你对每个char进行操作。我还将int i变量基于索引,这样你就不会在你正在检查的当前字符之前查看字符。同时将索引的递增移动到for循环之后,以便将其自身计为连续一次,因此“AA”将连续2次。
我需要你定义什么连续应该等于使这个正确计算。现在它将查看每个角色,并为每个匹配的角色(包括其自身)后连续添加1。
int totCharacters=0, vowels=0, digits=0, odds=0, consecutive=0, index=0;
String text;
char ch;
Scanner input = new Scanner(System.in);
System.out.print("Please enter a sentence terminated with a full stop or exclamation mark: ");
text = input.nextLine();
do {
ch = text.charAt(index);
if(ch=='.' && ch=='!')
break;
if(index<text.length()-1)
totCharacters++;
if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
vowels++;
if(ch>='0' && ch<='9')
digits++;
if(ch=='1' || ch=='3' || ch=='5' || ch=='7' || ch=='9')
odds++;
for(int i=index; i<text.length(); i++)
{
if(ch==text.charAt(i))
{
consecutive++;
}
else
{
break;
}
}
index++;
}while(ch!= '.' && ch!='!');