gpt4 book ai didi

java - 在 Scala 中创建并填充二维数组

转载 作者:行者123 更新时间:2023-12-04 14:21:57 25 4
gpt4 key购买 nike

我刚刚开始研究 Scala,我决定制作一个 roguelike 来尝试一下。我有 Java 背景,在使用 Scala 数组时遇到了问题。

当我尝试制作一个关卡(我称之为房间)时,我描绘了一个以 # 为墙的二维数组。据我所知,我尝试使用 Scala 嵌套 for 循环来放置 # 墙字符,当我 || j 为 0,或者当 i || j 在数组的末尾。在 for 循环的大括号内,我有 temp(i, j) = '#' 这给了我错误 "Expression of type Char doesn't conform to expected type,在我的 IDE IntelliJ 中什么都没有”

我已经在下面发布了我的代码,如果你能帮助我正确格式化和/或使用我的数组,那就太好了。

class Room
{
val room = generate

def generate: Array[Char] =
{
var temp = Array[Char](10, 10)

for (i: Int <- 0 to temp.length; j: Int <- 0 to temp.length)
{
if (i == 0 || j == 0 || i == temp.length-1 || j == temp.length-1)
temp(i, j) = '#'
}

return temp
}

def print: Unit =
{
for (i <- 0 to 10)
{
var line: String = ""
for (j <- 0 to 10)
{
line += room(i, j)
}
println(line)
}
}
}

最佳答案

var temp = Array[Char](10, 10)创建一维 Array包含两个换行符(10 是它在 ascii 中的值)。

您需要使用 var temp = Array.ofDim[Char](10,10)反而。然后您可以使用 temp(i)(j) 访问单元格(而不是 temp(i, j) )。

另请注意 for (i <- 0 to 10) {}会导致 ArrayIndexOutOfBoundsException .你会想要使用 for (i <- 0 until 10) {}相反。


您还可以使用 Array.tabulate方法:

// Dummy implementation
scala> def calculateCellValue(i: Int, j: Int) =
if (i == 0 || j == 0 || i == 9 || j == 9) '#' else 'x'

scala> val temp = Array.tabulate(10,10)(calculateCellValue)
temp: Array[Array[Char]] = Array(Array(#, #, #, #, #, #, #, #, #, #),
Array(#, x, x, x, x, x, x, x, x, #),
Array(#, x, x, x, x, x, x, x, x, #),
Array(#, x, x, x, x, x, x, x, x, #),
Array(#, x, x, x, x, x, x, x, x, #),
Array(#, x, x, x, x, x, x, x, x, #),
Array(#, x, x, x, x, x, x, x, x, #),
Array(#, x, x, x, x, x, x, x, x, #),
Array(#, x, x, x, x, x, x, x, x, #),
Array(#, #, #, #, #, #, #, #, #, #))

关于java - 在 Scala 中创建并填充二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31363143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com