2017-07-03 105 views
3

我有一个价格数组,它是字符串,看起来像这个“$ 100.00”。 我要检查所有这些价格的总和,但之前我需要字符串更改为数字,我没有这样说:Kotlin Java - 如何获取更改的数组元素的总和

val price2 = "$100.00" 
val price3 = "INCLUDED" 
val price4 = "$200.00" 
val prices: Array<String> = arrayOf(price2, price3, price4) 

下面是如何改变字符串到浮点数:

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) 
     } 

如何找到所有这些变化的元素的总和?我的意思是,我想要100.0 + 0.0 + 200.0的总和。 事情我想:

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

或者

//I tried to put this into the loop and after it 
val x = prices[0] + prices[1] + prices[2] 
println(x) 

感谢您的帮助!我一直在尝试在Kotlin中编写代码,但Java代码示例没问题。

编辑:我一直在考虑将p添加到新的数组中,然后找到第二个数组的总和,但我不知道如何执行此操作。

+0

你用得到什么你尝试过两种代码版本? –

+0

@TedHopp,'val sum = + p'我和'println(p)'一样 - 只是一个元素列表,比如100.0,0.0,200.0。 – Viterzgir

+0

如何初始化'sum'? –

回答

2

更脚踏实地,实地解决方案:

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

感谢您的回答,但我得到'错误:Kotlin:以下函数都不能用所提供的参数调用: @JvmName public fun Iterable .sum():Int在kotlin.collections中定义 @JvmName public fun Iterable .sum():在kotlin.collections中双重定义 @JvmName public fun Ioverable .sum():在kotlin.collections中定义的浮点数 @JvmName public fun Itenrable 。sum():Int在kotlin.collections中定义的...' – Viterzgir

+1

对不起。我忘了使用浮点零'0f'。有了它,一切如预期 – voddan

+0

哇,谢谢!更短,更美丽:) – Viterzgir

3

试试这个:

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) 
+0

非常感谢!它帮助:)我从意见中得到了你的想法,但是当我将'+'从'p'移到'='时它也起作用。再次感谢:) – Viterzgir

+0

可能你打算把'sum'声明为'var',而不是'val',否则以后你不能重新分配它。 – Ilya

+0

@Ilya - 是的。感谢您的支持。 –

1

可以跟这个也:

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

你真的需要照顾格式化你的代码。这是非常难以阅读的。 – Matt

+0

ok @Matt ...下次会记住!谢谢 –