2
(Scala 2.7.7 :)我不習慣2d數組。數組是可變的,但是如何指定一個2d數組,比如說3x4的大小。尺寸(2D)是固定的,但每個尺寸的尺寸應可初始化。我嘗試這樣做:初始化Scala中的2-dim數組
class Field (val rows: Int, val cols: Int, sc: java.util.Scanner) {
var field = new Array [Char](rows)(cols)
for (r <- (1 to rows)) {
val line = sc.nextLine()
val spl = line.split (" ")
field (r) = spl.map (_.charAt (0))
}
def put (row: Int, col: Int, c: Char) =
todo()
}
我得到這個錯誤: :11:錯誤:值更新不是字符 字段(R)= spl.map(_.charAt(0))
的成員如果這將是Java的,這將是太多的代碼,但我想知道如何做到這一點,所以我說明我的意思:
public class Field
{
private char[][] field;
public Field (int rows, int cols, java.util.Scanner sc)
{
field = new char [rows][cols];
for (int r = 0; r < rows; ++r)
{
String line = sc.nextLine();
String[] spl = line.split (" ");
for (int c = 0; c < cols; ++c)
field [r][c] = spl[c].charAt (0);
}
}
public static void main (String args[])
{
new Field (3, 4, new java.util.Scanner ("fraese.fld"));
}
}
和fraese.fld會看,例如,這樣的:
M M M
M . M
我得到了一些步驟與廣
val field = new Array [Array [Char]](rows)
,但我怎麼會那麼實行「放」?或者有更好的方法來實現2D陣列。是的,我可以用一個調光陣,並與
put (y, x, c) = field (y * width + x) = c
工作,但我寧願一個符號,看起來更加二維十歲上下。
- 是的,r應該從零開始。 - yes/no - (spl map vs. spl.map)它不起作用,是嗎? 我的格式化不正確 - 現在我改變了它。您的陣列方法對於我喜歡做的事情是正確的。但現在如何更新單個單元? (行:Int,col:Int,c:Char)=字段(行* cols + col)= c' 呃 - 我必須相應地使用put方法:\t 'def put(row: Int,col:Int,c:Char)=(field(row))(col)= c' 現在,突然間,這個:'def put(row:Int,col:Int,c:Char) =字段(行)(col)= c'也起作用。 – 2010-05-01 21:01:40