Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Arrays Squeak字符串数组与迭代_Arrays_String_Character_Iteration_Squeak - Fatal编程技术网

Arrays Squeak字符串数组与迭代

Arrays Squeak字符串数组与迭代,arrays,string,character,iteration,squeak,Arrays,String,Character,Iteration,Squeak,我已经创建了Array的一个子类,并为此编写了一些到目前为止效果良好的消息。但是,我现在遇到了最后一条消息的问题,这是我的代码主体: startString: charToTest "Returns a list of all the words that start with a given character" | toReturn i j numWords | i:= 1. j:= 1. numWords := 0. [i <= self size.] whileTrue: [

我已经创建了Array的一个子类,并为此编写了一些到目前为止效果良好的消息。但是,我现在遇到了最后一条消息的问题,这是我的代码主体:

startString: charToTest
"Returns a list of all the words that start with a given character"
|  toReturn i j numWords |
i:= 1.
j:= 1.
numWords := 0.
[i <= self size.] whileTrue: [
    (((self at: i) at: 1) = charToTest)
        ifTrue: [numWords := numWords + 1].
    i:= i+1.
].
toReturn := MyArray new: numWords.
i := 1. 
[i <= numWords.] whileTrue: [
    (((self at: i) at: 1) = charToTest)
        ifTrue: [toReturn at: j put: (self at: i). j := j+1].
    i := i + 1.
].
^toReturn
当我在我的工作区中选择此代码并打印它时,该方法几乎是正确的。但不完全如此。由于某种原因,“toReturn”中的第二个位置没有被填满。输出如下所示:

 a MyArray('some' nil)

为什么会这样?在if语句之后的第二个迭代循环中,我是否正确地分离了语句?我真的很困惑我到底做错了什么。任何帮助都将不胜感激

第一次迭代计算以给定字符开头的字数(假定字符串不是空的,但稍后您可以对此进行检查)。到现在为止,一直都还不错。第二次使用该计数(numWords)再次迭代数组时,这意味着只考虑初始数组第一个“numWords”槽中的单词


(你也可以考虑用DO代替你的AbLo--这是不太混乱的,而且更小)-< /P>

我们倾向于使用更紧凑的形式:

testArray := freshArray select: [:each | charToTest = each first ]

请注意,如果输入中有空字符串,此操作将失败

这是正确答案。我认为您使用do:loop也是正确的,我将返回并更改我的其他迭代,以使它们更干净。再次感谢,我真不敢相信我自己没有注意到。
testArray := freshArray select: [:each | charToTest = each first ]