我正在从文本文件中读取逗号分隔的数字,并执行文件中所有数字的加法运算-但是我得到的总和是错误的。
输入文件
1,2,3
源代码
val file=Source.fromFile("D:/scala/test.txt")
val f1=file.foldLeft(0)((a,b)=>a+b)
println(f1)
输出量
238
我可以对数组执行加法操作,但工作正常,但是从文件中读取数据时无法得到正确的答案。
最佳答案
Source
是Iterator[Char]
,因此您的foldLeft
在Char
上运行。当您将两个字符与+
相加时,就是在添加它们的十进制值。
您的来源正在读取该文件中的每个字符,包括逗号。如果查看ASCII图表,您会看到逗号的十进制值(即,
)为44,而1、2和3分别为49、50和51。
这给出了44 + 44 + 49 + 50 + 51 = 238
,这就是您看到的结果。
您真正想要的可能是这样的:
将文件读取为字符串
用逗号分割该字符串
将每个结果字符串转换为int
对结果整数求和
可以写成
Source.fromFile("D:/scala/test.txt").mkString.split(',').map(_.toInt).sum
要么
Source.fromFile("D:/scala/test.txt").mkString.split(',').map(_.trim.toInt).sum
请注意,如果无法将输入解析为int,则会抛出
toInt
。关于scala - Scala中n个数字的总和结果是错误的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43270822/