Kotlin\Java-如何获取已更改数组元素的总和

Kotlin\Java-如何获取已更改数组元素的总和,java,kotlin,Java,Kotlin,我有一个字符串的价格数组,看起来像这个“$100.00”。 我想检查所有这些价格的总和,但在我需要将字符串更改为数字之前,我是这样做的: val price2 = "$100.00" val price3 = "INCLUDED" val price4 = "$200.00" val prices: Array<String> = arrayOf(price2, price3, price4) 如何找到所有这些已更改元素的总和?我的意思是,我想要100.0+0.0+200.0的总和

我有一个字符串的价格数组,看起来像这个“$100.00”。 我想检查所有这些价格的总和,但在我需要将字符串更改为数字之前,我是这样做的:

val price2 = "$100.00"
val price3 = "INCLUDED"
val price4 = "$200.00"
val prices: Array<String> = arrayOf(price2, price3, price4)
如何找到所有这些已更改元素的总和?我的意思是,我想要100.0+0.0+200.0的总和。 我尝试过的事情:

//added this into for loop  
val sum = +p
println(sum)

谢谢你的帮助!我一直在尝试用Kotlin编写,但是Java示例就可以了

编辑:我一直在考虑将p添加到一个新数组中,然后找到第二个数组的和,但我不知道怎么做

试试这个:

var sum = 0
for (s: String in prices) {
        //I replace all dollar signs to empty space
        val s1 = s.replace("$", "")
        //I replace Included price to 0
        val s2 = s1.replace("INCLUDED", "0")
        //Change type to float
        val p = s2.toFloat()
        println(p)
        sum += p // NO var keyword!
}
println(sum)

更深入的解决方案:

val prices = listOf(price2, price3, price4)
val pricesParsed = prices.map {it.replace("$", "")}.map {it.toFloatOrNull() ?: 0f}
println(pricesParsed.sum())

你也可以这样做:

var p:Float = 0.0f
for(i :String in prices) {
   var s1 =   i.replace("$","")
   var s2 = s1.replace("INCLUDED","0")
   p  = p + s2.toFloat()
}

你试过的两个代码版本有什么用?@TedHopp,带有
val sum=+p
我得到了与
println(p)
相同的元素列表,比如100.0,0.0,200.0.如何初始化
sum
?尝试在循环之前将
sum
初始化为零,并在循环退出后打印
sum
。您可能还需要阅读。您可能应该使用
BigDecimal
而不是
Float
。非常感谢!这很有帮助:)我从评论中得到了你的想法,但当我也将
+
p
移动到
=
时,它起了作用。再次感谢:)您可能打算将
sum
声明为
var
,而不是
val
,否则以后无法重新分配。@Ilya-是的。谢谢你的回答。谢谢你的回答,但我得到了
错误:Kotlin:以下函数都不能用提供的参数调用:@JvmName public fun Iterable.sum():在Kotlin.collections@JvmName public fun Iterable.sum()中定义的Int:Kotlin.collections@JvmName public fun Iterable.sum()中定义的Double:在kotlin.collections@JvmName public fun Iterable.sum()中定义的浮点:在kotlin.collections中定义的Int…
对此表示抱歉。我忘记使用浮点零
0f
。所有这些都能按预期工作,因此也不建议使用列表而不是数组。它们具有相同的性能,但功能更多您确实需要注意格式化代码。这很难理解。
val prices = listOf(price2, price3, price4)
val pricesParsed = prices.map {it.replace("$", "")}.map {it.toFloatOrNull() ?: 0f}
println(pricesParsed.sum())
var p:Float = 0.0f
for(i :String in prices) {
   var s1 =   i.replace("$","")
   var s2 = s1.replace("INCLUDED","0")
   p  = p + s2.toFloat()
}