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)添加到字符串中。谢谢
答案 0 :(得分:1)
print
和println
没有返回String
,它会打印到标准输出。您在控制台中看到的()
是scala Unit
- 这是0元素的元组,因为print
和println
返回Unit
(类似)在javas void
)的语义方面。要附加计算的计算字符串值,只需执行此操作
str += ((1 / (Math.pow(2, 1).toInt)) % 2).toString
然后使用print
或println
将其输出到标准输出:
println(str)
但是,为了让你的代码更加惯用,我会看看
mkString
关于馆藏(random resource)看看那些更简洁的解决方案:
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))
请注意,我没有检查您的算法是否正确,只是重构了您已有的算法。