Ваша немедленная проблема заключается в том, что вы заканчиваете раздел ifTrue
точкой.Обычно вы можете просто удалить точку, но, поскольку ваша секция ifFalse
фактически не работает, вероятно, лучше удалить этот бит.
Но даже когда вы исправите это, вам все равно придется инициализировать max
чтобы вы не получили сообщение <
, отправленное объекту nil
.Вы можете инициализировать его первым элементом, если таковой имеется, тогда вы можете изменить цикл так, чтобы он начинался со второго.
Конечно, инициализация первого элемента проблематична, когда список пуст, поэтому вам следуетсправиться с этим также.В приведенном ниже коде я установил для него подходящее небольшое значение, а затем инициализировал его из первого элемента списка, только если он доступен.
Исправленный код:
| list max |
list := #(1 8 4 5 3).
max := -99999.
(list size) > 0 ifTrue: [max := (list at: 1)].
2 to: list size do: [:i |
max < (list at: i) ifTrue: [max := (list at: i)].
]
(max) displayNl
Этовыводит 8
как положено, а также отлично работает на крайних случаях (размер списка ноль и один).