大家都是这个平台上的新手,只是想让事情变得简单,就像下面的工作正确的方法一样,任务就是不计算给定字符串中的字符和元音。
import java.util.Scanner;
public class wordchk1
{
public static void main(String args [])
{
Scanner scan = new Scanner(System.in);
System.out.print("enter string: ");
String text = scan.nextLine();
countVowel(text);
}
public static void countVowel(String S)
{
int i,c=0,ln;
char ch;
ln=S.length();
for(i=0;i<ln;i++)
{
ch=S.charAt(i);
if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')
{
c++;
}
}
System.out.println("number of vowels ="+c);
System.out.println("number of consonants are="+S.length()-c);
}
}
弹出的错误似乎是某种糟糕的操作数...
感谢
答案 0 :(得分:2)
您需要将System.out.println("number of consonants are="+S.length()-c);
更改为System.out.println("number of consonants are="+(S.length()-c));
。原因是当程序简化你的方程时,会发生以下情况而没有额外的括号。
"Number of consonants are=" + S.length() - c
"Number of consonants are=" + 6 - 2
"Number of consonants are=6" - 2
因为你不能从String中减去某些东西,这意味着-
操作数是坏的,你会得到一个糟糕的操作数异常。添加括号使其改为执行此操作。
"Number of consonants are=" + (S.length() - c)
"Number of consonants are=" + (6 - 2)
"Number of consonants are=" + 4
"Number of consonants are=4"
因为括号在那里,程序首先优先考虑方程的那部分,这解决了问题。这遵循操作顺序,您可以google阅读所有相关内容。
你可以向Strings添加内容的原因是,(取决于值),当你尝试在Java中的字符串上使用不是String的东西时,它会将该值转换为String然后添加它。例如,"I am " + 6
变为"I am " + "6"
,变为"I am 6"
。
答案 1 :(得分:0)
字符串和原语不是二进制-
的有效操作数
ONLY binary + operator
对String和原始操作数有效。
Java Documentation 字符串转换 表示:
字符串转换(第5.4节)将仅应用于二进制+运算符的操作数,当另一个操作数是字符串时,该操作数不是字符串。
问题出在这句话中:
System.out.println(“辅音数量=”+ S.length() - c );
应该是
System.out.println(“辅音数量=”+ (S.length() - c));
答案 2 :(得分:0)
String s ="something";
String vowelarray[] = {}//vowel array
int countVowel = 0;
for : iterate vowelarray
{
countVowel += StringUtils.countMatches(s, vowelarray[i]);
}
s.length //to get length of String. you can maniputlate countVowel and s.length
答案 3 :(得分:0)
您的s.length()-c
不会给出合作伙伴的数量。例如,您有一个字符串,其中包含数字字符。在这种情况下,除非您进行某种验证,否则您的逻辑将会失败。所以我建议将每个字符转换为ASCII并比较int
。然后你会得到实际的结果。
int ascii = (int) character;
(糟糕的操作数问题已经解决了,所以我没有给出任何解释。)