此程序打印一个最大为给定数字的阶乘表。给定数字10,输出将如下:
1 != 1
2 != 2
3 != 6
4 != 24
5 != 120
6 != 720
7 != 5040
8 != 40320
9 != 362880
10!= 3628800
这是我的尝试:(其中有错误)
package nick
import Factorial.factorial
import scala.collection.immutable.TreeMap
object PPrintFactorial {
def main(args: Array[String] = Array("12")) {
// if (args.length > 0)
val listNum = 1 to args(1).toInt
val listFac = listNum.map(factorial)
val numFacPair = TreeMap((listNum zip listFac): _*)
var padding: String = " "
// for (sp <- listNum)
// padding = " " * (10 - sp.toString.length)
for ((k, v) <- numFacPair) println(k + padding + " ! = " + v)
}
}
问题:
修改
格式化问题:
!
中10!= 3628800
前面的空格比其他人多一个。如果输入的数字是三位数,则100 !=
行前面会有两个空格。也就是说,!
不是垂直对齐的。
答案 0 :(得分:1)
对于填充,您可以考虑使用制表符而不是空格来以非常方便的方式解决问题吗?
scala> println("1\t== x")
1 == x
scala> println("10\t== x")
10 == x
scala> println("100\t== x")
100 == x
scala> println("1000\t== x")
1000 == x
答案 1 :(得分:0)
main方法允许使用默认参数,但不能使用它们。当您使用java ...
运行类的main方法时,Java 将传递一个参数,该参数是一个包含所有参数的数组。
如果未提供参数,Java仍会传递参数。该数组将为空,但它仍然是一个参数。
即使不是这样,Java也不了解Scala默认值 - 这是Scala编译器在代码中插入的东西,所以它根本不会发生。
关于格式化,你没有解释它的错误。
答案 2 :(得分:0)
对于参数的默认值,只需检查args
数组是否为空。如果为空,则将其默认为所需的值。这应该做:
val limitValue = (if (args.isEmpty) "12" else args(0)).toInt
val listNum = 1 to limitValue
对于填充,您可以尝试这样的事情:
val maxLength = listNum.last.toString.length // assuming listNum has last() method
for ((k, v) <- numFacPair) {
val padding = (k.toString.length - maxLength).abs
println(k + (padding * " ") + " ! = " + v)
}
请注意,每次都会计算填充。 listNum
中的最后一个元素将是您的最大值(因此最长),k
- 当前元素 - 和maxLength
的长度之间的差异将是填充值。然后使用字符串乘法padding * " "
获得那么多空格。
我希望我理解正确,希望这有效。