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

时间:2017-04-07 06:08:18

标签: scala

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

输入文件

1,2,3

源代码

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

输出

238

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

2 个答案:

答案 0 :(得分:5)

SourceIterator[Char],因此您的foldLeft正在Char上运行。当您使用+添加两个字符时,您将添加其小数值。

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

这会给我们44 + 44 + 49 + 50 + 51 = 238,这是您看到的结果。

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

  1. 将文件读取为字符串
  2. 在逗号
  3. 上拆分该字符串
  4. 将每个结果字符串转换为int
  5. 对结果整数求和
  6. 可以写成

    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

答案 1 :(得分:3)

var slideIndex; showSlides(1); function plusSlides(n) { showSlides(slideIndex + n); // avoid assignment here } function currentSlide(n) { showSlides(n); // avoid assignment here } function showSlides(n) { var slides = document.getElementsByClassName("mySlides"); slideIndex = n; // assign only here, at a single place // Don't use n anymore, only work with slideIndex if (slideIndex > slides.length) {slideIndex = 1} if (slideIndex < 1) {slideIndex = slides.length} if(slideIndex == 1) aerialMap(); if(slideIndex == 2) febTiless(); if(slideIndex == 3) roadMap(); for (i = 0; i < slides.length; i++) { slides[i].style.display = "none"; } slides[slideIndex-1].style.display = "block"; } 将返回Source.fromFile("D:/scala/test.txt")序列。

Char类似,它会返回1,2,3Char,而在1,2,3中,它应该是内部数字

ASCII Number

因此, 49,44,50,44,51 正在对此 Int 序列进行求和。结果为fold