繁体   English   中英

main方法中的默认参数,并在Scala中漂亮地打印地图

[英]Default parameter in main method and pretty print a map in Scala

该程序打印一个最多给定数字的阶乘表。 给定数字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)
  }
}

题:

  1. main方法中是否允许使用默认参数? 如果是,该如何设置?
  2. 打印地图时如何调整填充? 正如您在代码的注释部分看到的那样,我无法正确添加填充。

编辑

格式化问题:

前面还有一个空间! 10!= 3628800 如果输入的数字是三位数,则100 !=行的前面还有两个空格。 也就是说, ! 没有垂直对齐。

对于填充,您可以考虑使用制表符而不是空格来以非常方便的方式解决问题?

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

main方法中允许使用默认参数,但不会使用它们。 当您使用java ...运行类的主方法时,Java 传递一个参数,该参数是一个包含所有参数的数组。

如果未提供任何参数,则Java仍将传递该参数。 该数组将为空,但仍然是一个参数。

即使不是这种情况,Java也不了解Scala默认值-这是Scala编译器在代码中插入的东西,因此根本不会发生。

至于格式,您没有解释它出了什么问题。

对于参数的默认值,只需检查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 * " "获得那么多空格。

我希望我能正确理解您,希望它能起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM