在Scala中初始化2-DIM阵列
-
02-10-2019 - |
题
(Scala 2.7.7 :)我不习惯2D阵列。阵列是可变的,但是我如何指定一个2D阵列,这是 - 假设3x4。尺寸(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 field(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
但是我更喜欢一个看起来更2Dish的符号。
解决方案
for (r <- (1 to rows)) {
应该是:
for (r <- (0 to rows - 1)) {
...从0而不是1开始?
field (r) = spl.map (_.charAt (0))
应该使用操作员语法,这样:
field (r) = spl map (_.charAt (0))
...没有'。'在SPL和地图之间?
这是我的版本 - 我不太确定应该是扫描仪的输入是什么,因此我用数组[String]代替了扫描仪。它编译并在Scala 2.7.5上运行:
class Field (val rows: Int, val cols: Int, lines: Array[String]) {
var field = new Array [Array[Char]](rows)
// These get replaced later on, but this is how to initialize a 2D array.
for (i <- (0 to rows - 1)) {
field(i) = new Array[Char](cols)
}
for (r <- (0 to rows - 1)) {
val line = lines(r)
val spl = line.split (" ")
field(r) = spl map (_.charAt (0))
}
}
var lines = Array[String] ("A A A A A", "B B B B B", "C C C C C", "D D D D D", "E E E E E")
var test = new Field(5, 5, lines)
test.field
不隶属于 StackOverflow