2016-05-26 32 views
0

我試圖添加元素到列表中,但它總是以所有元素相等的方式結束。 我中添加元素的代碼塊:爲什麼這個Scala列表中的所有元素都相等?

var slots = List[Calendar]()      
while (dateTimeBegin.getTime().compareTo(dateTimeEnd.getTime()) == -1) { 
    dateTimeBegin.add(Calendar.MINUTE, 50) 
    slots = dateTimeBegin :: slots 
    println(dateTimeBegin.getTime()) 
} 

println打印此:

//> Wed May 25 12:50:00 WEST 2016 
//| Wed May 25 13:40:00 WEST 2016 
//| Wed May 25 14:30:00 WEST 2016 
//| Wed May 25 15:20:00 WEST 2016 
//| Wed May 25 16:10:00 WEST 2016 

當我嘗試打印的清單:

for (i <- 0 to slots.length - 1) { 
    println(slots(i).getTime()) 
} 

我得到這樣的輸出:

//> Wed May 25 16:10:00 WEST 2016 
//| Wed May 25 16:10:00 WEST 2016 
//| Wed May 25 16:10:00 WEST 2016 
//| Wed May 25 16:10:00 WEST 2016 
//| Wed May 25 16:10:00 WEST 2016 

我試圖以各種方式更改行slots = dateTimeBegin :: slots。我試圖將::更改爲::=,::+和很多不同的組合,但從未設法得到正確的結果。

有誰知道我做錯了什麼?

+0

嘗試使用更多功能的方法來避免此類問題(不變性) – pedrorijo91

回答

4

您正在更改循環中的dateTimeBegin內部的值。想想看:你把相同變量的五個引用添加到列表中,然後你想知道爲什麼它們都具有相同的值...

有一個原因,他們不喜歡scala中的可變變量。 ..

+0

@undisp,請查看https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html – pedrofurla

相關問題