簡體   English   中英

吱吱聲Smalltalk-“打印特定整數”錯誤消息,如何改進以及為什么?

[英]Squeak Smalltalk -“Print specific integers” Error message, how to improve and why?

我想要的是:從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. 
                ].  
        ]. 

除錯誤消息外,輸出非常好。

在此處輸入圖片說明

以我目前的水平,我不知道為什么會出現該錯誤消息。

Q1:為什么出現錯誤信息?

問題2:如何改善?

更新:

我找到了解決此問題的另一種方法:

|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. 
                ].  
        ].

如果單擊調試按鈕,則可以訪問調試器,該調試器可以幫助您了解發生了什么。

您顯示的窗口中的列表是執行堆棧。 您嘗試執行的代碼段被標記為UndefinedObject>>DoIt 單擊它,您將看到代碼在哪里停止-執行時:

myArray at: n

在調試器中,有檢查器,如果單擊n,您將看到n = 8 ,然后檢查myArray,您將看到它只有7個元素。 因此,您嘗試使用超出數組界限的下標(索引)訪問myArray,因為錯誤消息告訴您...

您可以從調試器重新啟動該方法並逐步執行它。 但是,由於它將在循環123失敗,因此可能很無聊...您還可以在調試器中修改代碼,例如,使用myArray := #(2 4 5). acceopt,然后逐步重新啟動執行,以查看是否可以了解算法失敗的原因。

我的建議是嘗試以不同的方式思考。 您已經有一個包含要打印的值的數組( myArray )。 因此,如果您設法告訴myArray更直接地做您想做的事情,也許可以通過編寫類似於myArray do: [:element | ...] myArray do: [:element | ...]

從整數1到130,我想打印數組中已經給出的一些特定整數

1 to: 130 do: [ :i | 
    (array includes: i) ifTrue: [ Transcript show: i; cr. ] ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM