2010-09-26 138 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++) { 
    ... 
} 

這也是傳統的堅持與「我」作爲循環變量,除非有充分的理由使用另一個;在你的情況下,「序列」只是混淆。