2010-08-30 47 views
3

我想將「Prompter prompt:aStringPrompt」中的輸入值轉換爲整數值,我該怎麼做?字符串轉爲小寫整數

+0

在發佈我的答案後,我注意到這可能是重複的http://stackoverflow.com/questions/2226029 – 2010-08-30 08:10:28

+0

可能重複的[String to Integer Smalltalk](http://stackoverflow.com/questions/2226029/string-to-integer-smalltalk) – Mark 2013-01-26 19:33:21

回答

5

兩個步驟:(a)驗證輸入,並(b)轉換。

您可以這樣驗證:myString isAllDigits

轉換是微不足道的:'1' asInteger。在Squeak中,至少返回整數1. 'g1' asInteger返回1,'g1' asInteger也返回1。 g asInteger返回零。

在摘要

所以:

"Given some input string s containing a decimal representation of a number, either return s in integer form, or raise an exception." 
s := self getUserInput. 
(s isAllDigits) ifFalse: [ Exception signal: '"', s, '" is not a (decimal) number' ]. 

^ s asInteger. 
+0

先生在海豚怎麼樣,我不使用吱吱聲。你能用海豚語法來解釋嗎?非常感謝 – leroj 2010-08-30 08:19:40

+0

aString asInteger應該適用於所有的Smalltalks。最好的方法是嘗試一下,看看你的Smalltalk方言的類庫,以找出所有的可能性。 – 2010-08-30 10:19:58

+0

@Frank Shearar,感謝您的鏈接,但我仍然解決了我的問題。輸入對話框出現後,我輸入了我的號碼,但它不會將其更改爲asInteger或asNumber變量。我的問題是我宣佈我的隨機數它不會改變它在這裏是我的代碼請評論它,如果你有一個想法如何解決它謝謝 – leroj 2010-08-31 01:04:00

1

在海豚6只是嘗試這樣做:

(Prompter prompt: 'Enter a number') asInteger 

運行此(在上述地方光標在一個工作區,並點擊Ctrl-d),在輸入123出現的提示符,您將看到123作爲輸出顯示。如果刪除#asInteger調用,它將顯示「123」,表示已返回字符串。

至於你'不理解#number',這意味着你正在運行#number消息的代碼中的某處發送給一個不知道如何處理它的對象。

對於它的樂趣我把你的代碼,並稍微重新格式化它:

| dir | 

[ dir isNil or: [ dir isEmpty ] ] whileTrue: 
    [ dir:= Prompter prompt: 'Enter your number' caption: 'Input the Number' ]. 

MessageBox notify: 'your inputed number is ', (dir) caption: 'Inputed'. 

,發現它運行得很好。這時我才發現它沒有返回的字符串轉換爲數字,所以我把它改爲:

| dir | 

[ (dir isNil or: [ dir isEmpty ]) or: [ (dir select: [ :c | c isDigit not ]) size > 0 ] ] whileTrue: 
    [ dir:= Prompter prompt: 'Enter your number' caption: 'Input the Number' ]. 

MessageBox notify: 'your inputed number is ', (dir) caption: 'Inputed'. 

這也運行得很好,有額外的好處,它不會接受非數字字符。

分享和享受。