Reputation: 2549
I am trying to get a uniform layout when I print out rows from a multidimensional array in Scala. Basically the output I'm trying to get is this:
1 2 3 4 5 6 7 8 9 10 11 12
2 4 6 8 10 12 14 16 18 20 22 24
3 6 9 12 15 18 21 24 27 30 33 36
Basically I want 4 spaces in between, but it needs change when the digit is longer than 1 character. Any Ideas? All I've come up with so far is this:
object Main {
def main(args: Array[String]) {
var i1, i2 = 0
var grid = Array.ofDim[Int](12, 12)
for(i1 <- 1 to 12){
for(i2 <- 1 to 12) {
grid(i1-1)(i2-1) = i1 * i2
}
}
for (g <- grid) {
println(g.mkString("\t"))
}
}
}
But tabs are too long and indent the wrong way
Upvotes: 1
Views: 647
Reputation: 39577
Formatting:
scala> for (g <- grid) println(g map (i => f"$i%4d") mkString)
1 2 3 4 5 6 7 8 9 10 11 12
Edit for completeness:
Welcome to Scala 2.12.0-M3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60).
Type in expressions for evaluation. Or try :help.
scala> :pa
// Entering paste mode (ctrl-D to finish)
var i1, i2 = 0
var grid = Array.ofDim[Int](12, 12)
for(i1 <- 1 to 12){
for(i2 <- 1 to 12) {
grid(i1-1)(i2-1) = i1 * i2
}
}
// Exiting paste mode, now interpreting.
i1: Int = 0
i2: Int = 0
grid: Array[Array[Int]] = Array(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), Array(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24), Array(3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36), Array(4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48), Array(5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60), Array(6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72), Array(7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84), Array(8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96), Array(9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108), Array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120), Array(11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132), Array(12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144))
scala> for (g <- grid) println(g map (i => f"$i%4d") mkString)
warning: there was one feature warning; re-run with -feature for details
1 2 3 4 5 6 7 8 9 10 11 12
2 4 6 8 10 12 14 16 18 20 22 24
3 6 9 12 15 18 21 24 27 30 33 36
4 8 12 16 20 24 28 32 36 40 44 48
5 10 15 20 25 30 35 40 45 50 55 60
6 12 18 24 30 36 42 48 54 60 66 72
7 14 21 28 35 42 49 56 63 70 77 84
8 16 24 32 40 48 56 64 72 80 88 96
9 18 27 36 45 54 63 72 81 90 99 108
10 20 30 40 50 60 70 80 90 100 110 120
11 22 33 44 55 66 77 88 99 110 121 132
12 24 36 48 60 72 84 96 108 120 132 144
scala> for (g <- grid) println(g map (i => "%4d" format i) mkString)
warning: there was one feature warning; re-run with -feature for details
1 2 3 4 5 6 7 8 9 10 11 12
2 4 6 8 10 12 14 16 18 20 22 24
3 6 9 12 15 18 21 24 27 30 33 36
4 8 12 16 20 24 28 32 36 40 44 48
5 10 15 20 25 30 35 40 45 50 55 60
6 12 18 24 30 36 42 48 54 60 66 72
7 14 21 28 35 42 49 56 63 70 77 84
8 16 24 32 40 48 56 64 72 80 88 96
9 18 27 36 45 54 63 72 81 90 99 108
10 20 30 40 50 60 70 80 90 100 110 120
11 22 33 44 55 66 77 88 99 110 121 132
12 24 36 48 60 72 84 96 108 120 132 144
scala>
Upvotes: 4