Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Integer Squeak Smalltalk——”;“打印特定整数”;错误消息、如何改进以及原因?_Integer_Smalltalk_Squeak - Fatal编程技术网

Integer Squeak Smalltalk——”;“打印特定整数”;错误消息、如何改进以及原因?

Integer Squeak Smalltalk——”;“打印特定整数”;错误消息、如何改进以及原因?,integer,smalltalk,squeak,Integer,Smalltalk,Squeak,我想要的是: 从整数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 sh

我想要的是: 从整数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:为什么会出现错误消息?

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

如果单击“调试”按钮,您将获得对调试器的访问权限,该调试器可以帮助您了解正在发生的事情

窗口中显示的列表是执行堆栈。您试图执行的代码段被标记为
UndefinedObject>>DoIt
。单击它,您将看到代码在执行时停止的位置:

myArray at: n
在调试器中有检查器,如果单击n,您将看到
n=8
,然后如果您检查myArray,您将看到它只有7个元素。因此,您试图使用超出数组边界的下标(索引)访问myArray,错误消息告诉您

从调试器中,您可以重新启动该方法并逐步执行它。但由于它将在循环123失败,这可能会很无聊。。。您还可以在调试器中修改代码,例如使用
myArray:=#(2 4 5)。
acceopt,然后逐步重新启动执行,以了解算法失败的原因


我的建议是尝试用不同的方式思考。您已经有一个包含要打印的值的数组(
myArray
)。因此,如果您设法让
myArray
更直接地执行您想要执行的操作,可以编写类似于
myArray do:[:element |…]

的内容。如果您单击“调试”按钮,您将获得一个调试器的访问权限,该调试器可以帮助您了解正在发生的事情

窗口中显示的列表是执行堆栈。您试图执行的代码段被标记为
UndefinedObject>>DoIt
。单击它,您将看到代码在执行时停止的位置:

myArray at: n
在调试器中有检查器,如果单击n,您将看到
n=8
,然后如果您检查myArray,您将看到它只有7个元素。因此,您试图使用超出数组边界的下标(索引)访问myArray,错误消息告诉您

从调试器中,您可以重新启动该方法并逐步执行它。但由于它将在循环123失败,这可能会很无聊。。。您还可以在调试器中修改代码,例如使用
myArray:=#(2 4 5)。
acceopt,然后逐步重新启动执行,以了解算法失败的原因

我的建议是尝试用不同的方式思考。您已经有一个包含要打印的值的数组(
myArray
)。因此,如果您设法让
myArray
更直接地做您想做的事情,可以编写类似
myArray do:[:element |……]的内容

从整数1到130,我想打印数组中已经给定的一些特定整数

从整数1到130,我想打印数组中已经给定的一些特定整数


我认为数组包括:我很好。但我想我的方式更快。对吗?是的,Uko展示了O(m*n)解决方案,你的是O(m),但你必须先让它工作。让它工作>让它快。还有很多其他的方法,比如
Transcript-cr;show:(myArray选择:[:e | e介于:1和:130之间]
我认为数组包括:I很好。但我想我的方式更快。对吗?是的,Uko展示了O(m*n)解决方案,你的是O(m),但你必须先让它工作。让它工作>让它快。还有很多其他的方法,比如
Transcript-cr;显示:(myArray选择:[:e | e介于:1和:130之间]