--- Begin Message ---
Op 26-4-2020 om 20:17 schreef Sven Van Caekenberghe:
On 26 Apr 2020, at 20:10, Gabriel Cotelli <g.cote...@gmail.com> wrote:
In the first method you aren't doing an assignment, are sending the message =
to the temp isValid, if you change the method to:
decimalFromBinary: aString
| result isValid |
isValid := self isValidBinary: aString.
isValid
ifTrue: [ result := 0.
aString reverse
withIndexDo:
[ :digit :index | result := result + (digit
digitValue * (2 raisedTo: index - 1)) ].
^ result ]
ifFalse: [ ^ nil ]
it should work.
There is a #reverseWithIndexDo: method
Also, #digitValue might be considered a builtin method that you are not allowed
to use. Since you already did the #isValidBinary: test, you could say
(digit charCode - $0 charCode)
In the second one you're comparing characters with numbers, this will always
return false because the number 0 is not the same as the character 0.
Use
isValidBinary: aString
^ aString allSatisfy: [ :c | c = $0 or: [ c = $1 ] ]
or something like
isValidBinary: aString
^ aString allSatisfy: [ :c | '01' includes: c ]
On Sun, Apr 26, 2020 at 2:52 PM Roelof Wobben via Pharo-users
<pharo-users@lists.pharo.org> wrote:
Hello,
I have to make some code that convert a binary to a decimal and im not
allowed to use the convert methods that Pharo has.
So I have written this :
decimalFromBinary: aString
| result isValid |
isValid = self isValidBinary: aString.
isValid
ifTrue: [ result := 0.
aString reverse
withIndexDo:
[ :digit :index | result := result + (digit
digitValue * (2 raisedTo: index - 1)) ].
^ result ]
ifFalse: [ ^ nil ]
isValidBinary: aString
^ aString allSatisfy: [ :c | c = 0 or: [ c = 1 ] ]
but on the first method I see a message that the temp variables are read
before written.
and the second one I see a message that I use a or instead of searching
literals.
Where did I think wrong here ?
Roelof
Thanks, this problem is solved.
Roelof
--- End Message ---