为什么我的for-loop不起作用?

时间:2014-02-12 14:52:32

标签: java for-loop

我正在制作一个程序来计算我老师指定的短语中的元音数量。为了做到这一点,我做了一个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);

非常感谢能帮助我的人!

9 个答案:

答案 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)

检查退出条件和字符串比较,这应该使用equalif ("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);