2016-05-26 31 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

相关问题