我正在从文本文件中读取逗号分隔的数字,并执行文件中所有数字的加法运算-但是我得到的总和是错误的。

输入文件

1,2,3


源代码

val file=Source.fromFile("D:/scala/test.txt")
 val f1=file.foldLeft(0)((a,b)=>a+b)
 println(f1)


输出量

238


我可以对数组执行加法操作,但工作正常,但是从文件中读取数据时无法得到正确的答案。

最佳答案

SourceIterator[Char],因此您的foldLeftChar上运行。当您将两个字符与+相加时,就是在添加它们的十进制值。

您的来源正在读取该文件中的每个字符,包括逗号。如果查看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/

10-13 07:59
查看更多