我正在从文本文件中读取逗号分隔的数字,并在文件中执行所有数字的添加 - 但我得到的总和是错误的。
1,2,3
val file=Source.fromFile("D:/scala/test.txt")
val f1=file.foldLeft(0)((a,b)=>a+b)
println(f1)
238
我可以在数组上执行添加,但它工作正常,但在从文件中读取数据时,我无法得到正确的答案。
答案 0 :(得分:5)
Source
是Iterator[Char]
,因此您的foldLeft
正在Char
上运行。当您使用+
添加两个字符时,您将添加其小数值。
您的来源正在从该文件中读取每个字符,包括逗号。如果查看ASCII图表,您会看到逗号的十进制值(即,
)为44,而1,2和3分别为49,50和51。
这会给我们44 + 44 + 49 + 50 + 51 = 238
,这是您看到的结果。
你真正想要的可能是这样的:
可以写成
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,3
:Char
,而在1,2,3
中,它应该是内部数字:
ASCII Number
因此, 49,44,50,44,51
正在对此 Int 序列进行求和。结果为fold