我正在制作一个程序来计算我老师指定的短语中的元音数量。为了做到这一点,我做了一个for循环,理论上应该检查每个角色是a,然后是e,i,依此类推,然后继续下一个角色。出于某种原因,虽然for循环中没有任何东西可行。构建输出表明一切正常,但for语句不能正常运行。我知道这实际上是正确的字母,因为我打印了什么,但for循环仍然不起作用。令我困惑的是构建输出很好,所以它必须是一个逻辑错误,但我找不到它的位置。这是代码:
for (i = 0; i != phrase.length(); i++) {
String t = phrase.substring(i, i + 1);
if (t == "a") {
count++;
System.out.println(count);
}
if (t == "e") {
count++;
}
if (t == "i") {
count++;
}
if (t == "o") {
count++;
}
if (t == "u") {
count++;
}
}
System.out.println(count);
非常感谢能帮助我的人!
答案 0 :(得分:4)
退出条件错误,请尝试:
for (i = 0 ; i < phrase.length(); i++) {
答案 1 :(得分:2)
您的代码中存在多个问题。
1)第一个问题是i == phrase.length()
。这是直到条件。将其更改为i <= phrase.length()
。 *
在你的情况下,这可行,但最好做得对。通常,您可以检查此处的值,例如可能会大于10,如果您跳过10并继续计数,则会进入无限循环。因此,请始终使用<=
或>=
。
* 修改:您应该使用的更正&lt;因为你有一个使用i + 1的子字符串。
2)不要将==
用于String(或任何其他对象)比较。这将比较内存地址。对于String,请使用equals()
方法。
另外,请确保将已知的文字"a"
,"b"
放在前面,因为否则会出现nullpointer异常。
3)最好首先使用charAt(0)
,然后使用==
,因为您可以比较char(原始)值。
4)我还将if语句合并为一个。
String phrase = "WazzUp ? Who’s On FIRST??? IDUNNO";
phrase = phrase.toLowerCase();
System.out.println("value of phrase is: "+phrase);
int count = 0;
for (int i = 0 ; i < phrase.length() ; i++) {
String t = phrase.substring(i, i + 1);
if ("a".equals(t) || "e".equals(t) || "i".equals(t) || "o".equals(t) || "u".equals(t) ) {
count++;
}
}
System.out.println("value of count is: "+count);
答案 2 :(得分:1)
检查退出条件和字符串比较,这应该使用equal
:if ("a".equals(t)) { ... }
完成。
答案 3 :(得分:1)
你的贬义是错误的。
应该是
for(<startexpression> ; <any expression, that is still true> ; in-/decrement>)
在你的情况下,你从i=0
开始,所以在同一次运行中,我不能在你的情况下等于phrase.length()
。这就是你的代码没有得到执行的原因。
尝试:
for (i = 0 ; i < phrase.length(); i++) {
代替。
此外,在比较字符串时,您应该使用
String.equals("whatever")
而不是equeals-operator(=)。
答案 4 :(得分:0)
在for循环中,它不应该是i = phrase.length()
而不是i ==
吗? i ==
正在进行比较,而不是将i设置为等于(i =
将其设置为等于而不是比较)
答案 5 :(得分:0)
关于emilioicai所说的你的条件是错误的
for (i = 0 ; i == phrase.length(); i++) { <----! Wrong
for (i = 0 ; i < phrase.length(); i++) { <---- Correct
此外,字符串应与equals进行比较,因此不是这个
if (t == "a") {
count++;
System.out.println(count);
}
你应该有这个
if ("a".equals(t)) {
count++;
System.out.println(count);
}
如果你想看中你可以做这样的事情:)
String phrase = "WazzUp ? Who’s On FIRST??? IDUNNO";
phrase = phrase.toLowerCase();
System.out.println("value of phrase is: "+phrase);
int count = 0;
String[] characters = new String[] {"a", "e", "i", "o", "u"};
for (int i = 0 ; i < phrase.length() ; i++) {
String t = phrase.substring(i, i + 1);
for(String character : characters){
if(character.equals(t)){
count++;
}
}
}
System.out.println("value of count is: "+count);
以上使代码更好,更具可扩展性,更易于阅读
答案 6 :(得分:0)
您的代码有两个错误。 首先, for(i = 0; i&lt; phrase.length(); i ++){} 第二, if(t .equals(“a”)){但不是 if(t ==“a”){
答案 7 :(得分:0)
试试这个:
for (i = 0; i != phrase.length(); i++) {
String t = phrase.substring(i, i + 1);
System.out.println(t);
if (t.equals("a")) {
count++;
System.out.println(count);
}
if (t.equals("e")) {
count++;
}
if (t.equals("i")) {
count++;
}
if (t.equals("o")) {
count++;
}
if (t.equals("u")) {
count++;
}
}
顺便说一句,将你的情况改变为这种情况更为常见:i < phrase.length()
因为它更好地显示了进度,并提高了代码的可读性。
答案 8 :(得分:-1)
这样做
String phrase = "WazzUp ? Who’s On FIRST??? IDUNNO";
phrase = phrase.toLowerCase();
int count = 0;
int i = 0;
System.out.println(phrase);
for (i = 0 ; i < phrase.length(); i++) {
String t = phrase.substring(i, i + 1);
if (t == "a") {
count++;
System.out.println(count);
}
if (t == "e") {
count++;
}
if (t == "i") {
count++;
}
if (t == "o") {
count++;
}
if (t == "u") {
count++;
}
}
System.out.println(count);