如何将print(.....),println(..)添加到String scala

时间:2016-10-18 15:52:01

标签: scala

def logic(n : Int):String = {
    var rows = Math.pow(2,n).toInt;
    var i = 0;
    var str : String = "";
   for(i<-0 until rows)
    {
     var j = n-1 ;
      for(j<-(0 to n-1).reverse)
      {
        str+=(print((i/(Math.pow(2,j).toInt))%2)).toString;
      }
      str+=(println()).toString;
    }
   println(str.toString);
   return str.toString;}

当我运行println(postfix)时,我看到很多()帮我将print((i /(Math.pow(2,j).toInt))%2)添加到字符串中。谢谢

1 个答案:

答案 0 :(得分:1)

printprintln没有返回String,它会打印到标准输出。您在控制台中看到的()是scala Unit - 这是0元素的元组,因为printprintln返回Unit(类似)在javas void)的语义方面。要附加计算的计算字符串值,只需执行此操作

str += ((1 / (Math.pow(2, 1).toInt)) % 2).toString

然后使用printprintln将其输出到标准输出:

println(str)

但是,为了让你的代码更加惯用,我会看看

看看那些更简洁的解决方案:

def truthtable(n: Int) = (0 until Math.pow(2, n).toInt).map { i =>
  (0 to n - 1).reverse.map(j => (i / (Math.pow(2, j).toInt)) % 2).mkString("")
}.mkString("\n")

这会将真值表作为字符串返回,然后你要做的就是打印它:

println(truthtable(5))

请注意,我没有检查您的算法是否正确,只是重构了您已有的算法。