【问题标题】:What's wrong with this For loop?这个 For 循环有什么问题?
【发布时间】:2010-09-26 15:03:14
【问题描述】:

我无法让这个程序计算空格,我感觉循环中存在逻辑错误,但我太缺乏经验,无法自己解决。有什么建议吗?

System.out.print("Enter a string: ");
String myString = keyboard.next();
int numBlanks = 0;

//find string length
int length = myString.length() - 1;
System.out.println("length " + length);

for(int sequence = 0; sequence >= length; ++sequence);
{

    if(myString.charAt(length)==' ')
    {
        numBlanks += 1;
        length -= length;
    }
    else 
        length -= length;

}

【问题讨论】:

  • (使用标准编码约定,您不会遇到for 循环中的虚假分号问题。)

标签: java for-loop


【解决方案1】:

我可以看到几个错误:

for 循环末尾的分号。删除它。

下一个

sequence >= length

应该是

sequence <= length

if(myString.charAt(length)==' ')

应该是

if(myString.charAt(sequence)==' ')

你需要更改length,因为你已经在更改sequence

所以我们得到:

for(int sequence = 0; sequence <= length; ++sequence) {

    if(myString.charAt(sequence)==' ') {
        numBlanks += 1;
    }
}

【讨论】:

  • +1 但认为应该有一个“不要”在: 并且你需要改变长度
【解决方案2】:

sequence &gt;= length 被大声朗读为“sequence 大于或等于 length”。它被初始化为零。什么时候会大于等于length

【讨论】:

    【解决方案3】:

    除了其他人指出的错误外,这里还有违反约定的;您将长度计算为 n - 1,然后比较 =,但应该是

    for (int i = 0; i < n; i++) {
        ...
    }
    

    在您的情况下,这将表示为:

    for (int i = 0; i < myString.length(); i++) {
        ...
    }
    

    除非有充分的理由使用另一个,否则坚持使用“i”作为循环变量也是惯例;在您的情况下,“序列”只是令人困惑。

    【讨论】:

      【解决方案4】:

      第一期:

      改变

      for(int sequence = 0; sequence >= length; ++sequence);
      

      for(int sequence = 0; sequence <= length; ++sequence);  //flipped >= to <=
      

      第二期:

      改变

      I am too inexperienced to figure it out myself.
      

      This will be some good practice for debugging.  //int confidence should never be negative
      

      :D

      【讨论】:

      • 在修复“第一个问题”时,请记住还要删除 for 语句末尾的多余分号 :-)
      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      相关资源
      最近更新 更多