2010-09-26 157 views
1

我无法得到这个程序来计算空间,我有一种感觉,在循环中有一个逻辑错误,但我太缺乏经验来弄清楚自己。有小费吗?这个For循环有什么问题?

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; 

} 
+2

(有了标准的编码约定,你不会在'for'循环中得到伪分号的问题。) – 2010-09-26 15:49:26

回答

9

有一些错误,我可以看到:

分号结束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

+1但是认为应该有一个“不要”:你需要改变长度在所有 – barrowc 2010-09-27 03:14:04

3

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

+0

为什么我在这里得到一个downvote的任何理由? – 2010-09-26 16:26:33

0

第一个问题:

变化

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

+0

在修复“第一个问题”时,请记住在句子结尾处删除多余的分号:-) – Grodriguez 2010-09-27 06:58:32

1

除了错误其他人指出,有违反约定在这里;你计算的长度为n - 1,然后比较< =(好,> =,但应该是< =)。通常情况下,除非有很好的理由,我们的循环是这样的:

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

在你的情况,这可以表示为:

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

这也是传统的坚持与“我”作为循环变量,除非有充分的理由使用另一个;在你的情况下,“序列”只是混淆。