(Scala 2.7.7:) 私は 2 次元配列に慣れていません。配列は変更可能ですが、サイズが 3x4 の 2d-Array を指定するにはどうすればよいですか。次元 (2D) は固定されていますが、次元ごとのサイズは初期化可能です。私はこれを試しました:
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: エラー: 値の更新は Char フィールド (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-Array を実装するより良い方法があります。はい、one-dim-Array を使用して作業できます
put (y, x, c) = field (y * width + x) = c
しかし、私はより 2D っぽい記法を好みます。