【发布时间】:2020-10-05 04:24:23
【问题描述】:
因此,对于一个项目,我正在尝试制作游戏生成的块移动的特定部分。所有坐标都存储在一个列表中,通过“x”和“y”值我应该能够将坐标相加,进而使块移动。
def movement(move: Point): Unit = {
val newList: List[Point] = placed
val xx = move.x; val yy = move.y
for (i <- newList.indices) newList(i) += Point(xx, yy)
}
这里,“放置”是放置所有坐标的列表。 “Point”类型指的是“x”和“y”值。
这里的问题是,当我尝试将新值添加到坐标时,它会说:
类型不匹配。必需:字符串,找到:点
我觉得这很奇怪,因为我的列表不是以字符串类型启动的。有没有办法解决这个问题?
非常感谢。
添加了之前项目的示例:
var playAnimal: List[Point] = List(Point(2,0), Point(1,0), Point(0,0))
def checkForWrap (p: Point) : Point = {
var x = p.x; var y = p.y
x = if (x < 0) nrColumns - 1 else if (x > nrColumns - 1) 0 else x
y = if (y < 0) nrRows - 1 else if (y > nrRows - 1) 0 else y
Point(x, y)
}
def moveAnimal(): Unit = {
if(!gameOver) {
def newAnimalFront: Point = {
val newHead: Point = currentDir match {
case East() => playAnimal.head + Point( 1, 0)
case West() => playAnimal.head + Point(-1, 0)
case North() => playAnimal.head + Point( 0, -1)
case South() => playAnimal.head + Point( 0, 1)
}
checkForWrap(newHead)
}
playAnimal = newAnimalFront +: playAnimal.init
}
}
但是,此方法在我当前的项目中显示字符串不匹配。
【问题讨论】:
-
如果
newList(i)是Point,那么Point += Point应该做什么? -
@jwvh 例如,如果块必须向下移动并且程序显示移动(Point(0,1)),则应将新点添加到 newList(i) 中。我可能做错了。
-
您不是将其添加到列表中,而是将其添加到列表中索引
i的内容中,这是Point的一个实例。 -
1 - 您想在
newList中追加一个新元素,还是调整newList中的每个元素? 2 - ScalaList是不可变的,并且由于movement()方法返回Unit(即什么都没有),它对任何东西都没有影响。 -
如果
Point有一个+方法(即Point + Point是可能的),这并不意味着+=是可能的。使用.map()创建一个新的调整后的List[Point],然后将其分配给您的var变量。 (顺便说一句,该代码是非常糟糕的 Scala 风格。)
标签: java string scala mismatch