2014-04-08 99 views
1

我試圖通過解析字符串的字符並找到整個浮點數或整數來識別float vs int。如果我找到'。'那麼我不希望這在我的循環條件。通過循環迭代中途更改循環條件

我想要做這樣的事情:

do 
{ 
    if((char) nextChar == '.') 
     reachedDot = true; 

    integer += (char) nextChar; 
    readChar(); 
} while(// if(reachedDot){ 
     // Character.isDigit(nextChar) } 
     // else { (Character.isDigit(nextChar) || nextChar == '.')}); 
+0

你能解釋一下你想要什麼嗎,你這個意思是什麼:'如果我找到'。'那麼我不希望這在我的循環條件。 ' – CMPS

+0

@ user2052519你能告訴我們,如果你只是想識別一個字符串是浮點還是整數?如果那是我們可以推薦的其他方法。 – Dexters

+0

在這種情況下做的最簡單的事情就是讓你「打開」一個'bool'變量,並在循環中設置該變量。然後,設置它的邏輯可以像你喜歡的那樣複雜。 –

回答

1

三元運營商應該做的伎倆:

do 
{ 
    if((char) nextChar == '.') 
     reachedDot = true; 

    integer += (char) nextChar; 
    readChar(); 
} while (reachedDot ? Character.isDigit(nextChar) : ((Character.isDigit(nextChar) || nextChar == '.')); 

此,當然也可以使用一些布爾代數簡化,因爲Character.isDigit(nextChar)應始終循環繼續:

do 
{ 
    if((char) nextChar == '.') 
     reachedDot = true; 

    integer += (char) nextChar; 
    readChar(); 
} while (Character.isDigit(nextChar) || (!reachedDot && nextChar == '.')); 
0

合併兩個條件與或:

} while((reachedDot && Character.isDigit(nextChar)) || 
    (!reachedDot && (Character.isDigit(nextChar) || nextChar == '.'))); 

這樣,在reachedDot是真實的情況下,你的第一個條件檢查。在reachedDot爲假的情況下,檢查您的第二個條件。

0

其他對於這樣一個簡單的問題,答案看起來很技術性,所以如果你覺得它太簡單,就不要理我。

如果您接受掃描儀的輸入,則可以使用genericfooinput.hasNextInt()來檢查用戶輸入是否爲Int。如果它返回true,那麼你可以繼續你的循環。

if(myVariable.hasNextInt() == true) { 
     int input = myVariable.nextInt(); 

} 
0

你可以用兩個循環做到這一點。第一個循環讀取數字,直到沒有剩下的數字。然後你看看下一個角色。如果它不是一個點,那麼你就完成了。如果它一個點,那麼你運行第二個循環,讀取數字,直到沒有剩餘的數字,然後粘貼到最後。