在Scala中,n个数字结果的总和是错误的

Rav*_*avi 2 scala

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

输入文件

1,2,3
Run Code Online (Sandbox Code Playgroud)

源代码

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

产量

238
Run Code Online (Sandbox Code Playgroud)

我可以在数组上执行添加并且它工作正常,但是从文件中读取数据时我无法得到正确的答案.

dan*_*xon 5

A Source是一个Iterator[Char],所以你foldLeftChars 上运作.当您添加两个Chars时+,您将添加其十进制值.

您的源正在读取该文件中的每个字符,包括逗号.如果你看一个ASCII图表,你会看到逗号(即,)的十进制值是44,而1,2和3分别是49,50和51.

这给了我们44 + 44 + 49 + 50 + 51 = 238,这是你看到的结果.

你真正想要的可能是这样的:

  1. 将文件读取为字符串
  2. 在逗号上拆分该字符串
  3. 将每个结果字符串转换为int
  4. 求结果整数

哪个可以写成

Source.fromFile("D:/scala/test.txt").mkString.split(',').map(_.toInt).sum
Run Code Online (Sandbox Code Playgroud)

要么

Source.fromFile("D:/scala/test.txt").mkString.split(',').map(_.trim.toInt).sum
Run Code Online (Sandbox Code Playgroud)

请注意,toInt如果无法将输入解析为int ,则抛出.