2017-07-03 100 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 ...下次會記住!謝謝 –