2015-12-09 62 views
0

感谢您的阅读!我创建了一个递归数独求解程序(除其他外),称为一个函数“步骤”,为板子上的所有位置添加元素,这些元素在解决方案元素集合中只有一个可能的解决方案。正在更新斯卡拉列表值

sudoku.grid.updated(row, sudoku.grid(row).updated(column, value)) 

当行,列和价值正在从上面的函数返回的元组,而数独是另一个类和网格是::

val grid: List[List[Int]] 

其中每行借此通过以下完成一个新的List.When我打印上面的代码段我正确地得到一个更新列表,例如。

List(6, 0, 0, 4, 1, 0, 0, 9, 3) 

变得

List(6, 0, 0, 4, 1, 8<<<Correctly Updated, 0, 9, 3) 

根据需要,但是当涉及到通过简单地移除从所述第一代码段的打印()打印整个网格,这些值不更新。任何帮助将不胜感激!

+2

你是否将更新的网格分配给任何东西?或者只是将它传递给打印功能?您可能想要显示更多的代码上下文以使问题变得清晰。 – Shadowlands

+0

请显示您的代码,以便有人可以复制它。 提供一个可运行的示例,以便人们可以轻松地为您提供帮助。 –

回答

0

scala.List是不可变的(好东西),你不能改变它的内容。 List.updated返回一个新的列表,其中指定的元素发生更改,这是您打印从代码返回的值时看到的内容。但原始列表未被修改。

解决此问题的方法是使用scala.collection.mutable.Seq而不是List。这些是可变的集合,您可以在其中调用seq.update(index, elem),这将改变实际基础集合的内容。

更好的是,找出你需要的只有(或主要)不变的对象。这是功能性的方式。