如何在IBM Swift Sandbox中播种rand()?

时间:2015-12-27 10:52:04

标签: swift random ibm-swift-sandbox

我是StackOverflow的新手,所以如果有更好的方法发布问题,请纠正我,这是现有问题的特定情况。

Alberto Barrera回答 How does one seed the random number generator in Swift?

let time = UInt32(NSDate().timeIntervalSinceReferenceDate)
srand(time)
print("Random number: \(rand()%10)")

这一般是完美的,但是当我在The IBM Swift Sandbox中尝试它时,它每次运行都会给出相同的数字序列,至少在半小时的时间内。

import Foundation
import CoreFoundation

let time = UInt32(NSDate().timeIntervalSinceReferenceDate)
srand(time)
print("Random number: \(rand()%10)")

目前,每次Run都会打印5。

有没有人找到在IBM Sandbox中执行此操作的方法?我发现random()和srandom()产生一个不同的数字序列,但每次Run都是相同的。我还没有在Foundation,CoreFoundation,Darwin或Glibc中找到arc4random()。

顺便说一句,我谦卑地建议声誉超过1500的人创建一个标签IBM-Swift-Sandbox。

3 个答案:

答案 0 :(得分:2)

这是我们在Sandbox中实现服务器端缓存的方式的问题;非确定性代码将不断返回相同的答案,即使它不应该。我们暂时禁用它,你应该在每次运行时获得不同的结果。我们目前正在开发更好的机制来确保Sandbox的可扩展性。

我也会看到那个标签!

答案 1 :(得分:1)

yourEditText.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { /* Change Button state here */ } }); 按预期工作。如果您每次在srand而不是let time = UInt32(NSDate().timeIntervalSinceReferenceDate)中使用任意数字更改值,则会输出随机数。

也许这是一个缓存问题,它只是没有看到代码中的任何更改,也没有发送它进行重新编译:)

答案 2 :(得分:0)

我不知道发生了什么,但今天它完全正常。所以我想这个问题已经回答:

srand(UInt32(NSDate().timeIntervalSinceReferenceDate))

工作正常。

(我认为一定有些变化。它在两台不同的计算机上的表现方式相同(重复尝试产生相同的数字)大约10天......奇怪。)