感谢阅读!我已经创建了一个递归的数独求解程序,其中(除其他外)调用一个函数“步骤”,它将元素添加到板上的所有位置,这些元素在该元素集的解决方案中只有一个可能的解决方案。这可以通过以下方式完成:
sudoku.grid.updated(row, sudoku.grid(row).updated(column, value))
其中row,column和value是从上面的函数返回的元组,而sudoku是另一个类,grid是a:
val grid: List[List[Int]]
每行占用一个新List。当我打印上面的代码段时,我正确地得到一个更新的List,例如。
List(6, 0, 0, 4, 1, 0, 0, 9, 3)
变为
List(6, 0, 0, 4, 1, 8<<<Correctly Updated, 0, 9, 3)
根据需要,但是当通过简单地从第一个代码段中删除print()来打印整个网格时,值不会更新。任何帮助将不胜感激!
答案 0 :(得分:0)
scala.List
是不可变的(好东西),你不能改变它的内容。 List.updated
会返回一个 new 列表,其中的元素已按指定方式更改,这是您在打印代码返回的值时所看到的内容。但原始列表未被修改。
解决这个问题的方法是使用scala.collection.mutable.Seq
代替List
。这些是可变集合,您可以在其上调用seq.update(index, elem)
,这将改变实际底层集合的内容。
更好的是,只需要(或大部分)不可变对象来解决所需的问题。这是功能性的方式。