You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pharo中实现十进制转二进制递归方法遇索引错误求助

问题分析与修复方案

错误原因

  1. errorNotIndexable报错根源:你误用了asStringWithCommas方法,这个方法用于给大数字添加千位分隔符(比如1234 asStringWithCommas返回'1,234'),在递归处理单个数字(0或1)时,该方法内部实现触发了索引操作,而SmallInteger本身不是可索引对象,因此报错。应该用asString来将单个数字转为字符串。
  2. 递归逻辑多处错误:
    • 字符串拼接顺序颠倒:当前余数应该拼在递归结果的末尾,否则会得到反转的二进制字符串(比如输入5会得到110而非101)。
    • 未返回递归结果:ifTrue块内的代码没有用^返回拼接后的字符串,导致执行完后继续走到错误抛出语句。
    • 错误处理位置错误:无论输入是否合法,最后都会执行self error:,导致正整数输入也会触发错误。

修正后的代码

decimalBinary
    self < 0 ifTrue: [ self error: 'Not valid for negative integers' ].
    self = 0 ifTrue: [ ^ '0' ].
    self = 1 ifTrue: [ ^ '1' ].
    ^ (self // 2) decimalBinary , (self % 2) asString

代码说明

  • 先判断负数,直接抛出错误,避免后续递归进入非法分支。
  • 明确递归终止条件:数字为0或1时,直接返回对应的字符串。
  • 递归时先获取高位二进制字符串(self//2的结果),再拼接当前位的余数(self%2转字符串),保证二进制位顺序正确。
  • 使用^明确返回拼接结果,确保递归能正确传递返回值。

测试验证

输入5 decimalBinary返回'101',输入0 decimalBinary返回'0',输入-3 decimalBinary会抛出预期的错误提示。

内容的提问来源于stack exchange,提问作者decabytes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:25:28