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

Java 在Scala中创建并填充二维数组,java,arrays,scala,multidimensional-array,intellij-idea,Java,Arrays,Scala,Multidimensional Array,Intellij Idea,我刚刚开始研究Scala,我决定做一个类似流氓的东西,让我的脚湿透。我来自Java背景,在使用Scala阵列时遇到了问题 当我试着做一个水平面,我称之为房间,我画了一个二维阵列,用作为墙。据我所知,当I | | j为0或I | | j位于数组末尾时,我尝试使用Scala嵌套for循环来放置墙字符。在for循环的大括号内,我有temp(I,j)='#',这给了我一个错误“Char类型的表达式不符合预期的类型,没有任何内容”,在我的IDE IntelliJ中 我已经在下面发布了我的代码,如果您能帮助

我刚刚开始研究Scala,我决定做一个类似流氓的东西,让我的脚湿透。我来自Java背景,在使用Scala阵列时遇到了问题

当我试着做一个水平面,我称之为房间,我画了一个二维阵列,用
作为墙。据我所知,当I | | j为0或I | | j位于数组末尾时,我尝试使用Scala嵌套for循环来放置
墙字符。在for循环的大括号内,我有
temp(I,j)='#'
,这给了我一个错误
“Char类型的表达式不符合预期的类型,没有任何内容”
,在我的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)
        }
    }
}
教室
{
val房间=生成
def生成:数组[Char]=
{
var temp=Array[Char](10,10)

对于(i:Int您需要
Array.ofDim
而不是
Array[Char](10,10)
,后者是两个元素的数组

另外,你的牙套放错线了

package dims

class Room {
    val room = generate

    def generate = {
        val temp = Array.ofDim[Char](10, 10)

        for (i <- 0 until temp.length; j <- 0 until temp(0).length) {
            temp(i)(j) =
              if (i == 0 || j == 0 || i == temp.length-1 || j == temp(0).length-1) '#' else ' '
        }
        temp
    }

    def print(): Unit = {
        for (i <- 0 until room.length) {
            var line: String = ""
            for (j <- 0 until room(0).length) {
                line += room(i)(j)
            }
            println(line)
        }
    }
}
object Test extends App {
  val r = new Room
  r.print()
}
包dims
教室{
val房间=生成
def生成={
val temp=ofDim[Char]的数组(10,10)

for(i
var temp=Array[Char](10,10)
创建一个一维
数组
,其中包含两个换行字符(10是其ascii值)

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


还要注意的是,
for(i)REPL打印机实际上并没有像那样对齐数组,但也许它应该这样对齐。因为您枚举了javaism,所以添加var和return是不需要的。我想我是唯一一个在线无聊的人。
// 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(#, #, #, #, #, #, #, #, #, #))