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

Pharo Smalltalk实现数组偶数平均值 用whileTrue:和do循环修复错误代码

Pharo Smalltalk 偶数平均值实现(含问题排查)

原代码问题排查

  • 数组元素仅在循环外获取一次:elem := x at: z 只在循环前执行,循环内索引z递增后没有重新读取当前位置的元素,始终用第一个元素判断奇偶
  • 循环边界错误:Smalltalk数组为1基索引,[z < y] 的条件会漏掉最后一个索引为y的元素
  • 缺少偶数计数逻辑:需求为计算平均值,仅累加偶数和没有统计符合条件的偶数数量,无法完成平均值计算
  • 最终仅输出总和,没有平均值计算逻辑

正确实现

方式1:使用whileTrue:循环实现

| arr arrLen currentIdx sum evenCount avg |
arr := #(84 45 54).
sum := 0.
evenCount := 0.
currentIdx := 1.
arrLen := arr size.

[currentIdx <= arrLen] whileTrue: [
    | currentElem |
    currentElem := arr at: currentIdx.
    currentElem even ifTrue: [
        sum := sum + currentElem.
        evenCount := evenCount + 1
    ].
    currentIdx := currentIdx + 1
].

"无偶数场景做除0兼容处理"
avg := evenCount > 0 ifTrue: [ sum / evenCount ] ifFalse: [ 0 ].
Transcript clear.
Transcript show: '偶数平均值为: ', avg printString.

测试输出结果:偶数平均值为: 69


方式2:使用do:循环实现

| arr sum evenCount avg |
arr := #(84 45 54).
sum := 0.
evenCount := 0.

arr do: [ :currentElem |
    currentElem even ifTrue: [
        sum := sum + currentElem.
        evenCount := evenCount + 1
    ]
].

avg := evenCount > 0 ifTrue: [ sum / evenCount ] ifFalse: [ 0 ].
Transcript clear.
Transcript show: '偶数平均值为: ', avg printString.

测试输出结果:偶数平均值为: 69


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:54:05