원하는 내용은 다음과 같습니다. 정수 1에서 130까지 배열에서 이미 지정된 특정 정수를 인쇄하려고합니다. 2 32 44 67 89 111 123 그들은 작은 순서대로 저장됩니다.스퀵 스몰 토크 - "특정 정수 인쇄"오류 메시지, 개선 방법 및 이유?
여기 내 코드입니다 :
|a n myArray|
myArray := #(2 32 44 67 89 111 123).
n := 1.
a := myArray at: n.
1 to: 130 do: [:i|
i = a
ifTrue: [
Transcript show: i; cr.
n := n + 1.
a := myArray at: n.
].
].
출력은 오류 메시지를 제외하고 매우 좋다. 이 오류 메시지가 나타납니다 왜
내 현재 수준, 나는 아무 생각이 없습니다.
질문 : 왜 오류 메시지가 나타 납니까?
Q2 : 어떻게 향상시킬 수 있습니까?
업데이트 :
|myArray|
myArray := #(2 32 44 67 89 111 123).
n := 1.
a := myArray at: n.
1 to: 130 do: [:i|
i = a
ifTrue: [
Transcript show: i; cr.
n := n +1.
n = 8
ifTrue: [n := n - 1].
a := myArray at: n.
].
].
비록 추한 외모 :
나는이 문제를 해결하는 또 다른 방법을 찾아 냈다.
다시 업데이트 : 디버그 버튼을 클릭하면
|a n myArray|
myArray := #(2 32 44 67 89 111 123).
n := 1.
a := myArray at: n.
1 to: 130 do: [:i|
i = a
ifTrue: [
Transcript show: i; cr.
n := n + 1.
(n = 8) ifTrue: [^'Found it!'].
a := myArray at: n.
].
].
나는 배열에 다음을 포함한다고 생각한다 : 나는 좋다.그러나 나는 내 방식이 더 빠를 것 같아요. 맞습니까? –
예, Uko는 O (m * n) 해결책을 보여 주지만, 당신은 O (m) 이었지만 먼저 그것을 만들어야합니다. 그것을 일하게하십시오> 그것을 빨리 만드십시오. 'Transcript cr;과 같은 다른 많은 방법이 있습니다. 보여주기 : (myArray select : [: e | e between : 1 and : 130])' –