Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#随机数始终相同_C#_Android_Mono - Fatal编程技术网

C#随机数始终相同

C#随机数始终相同,c#,android,mono,C#,Android,Mono,在整个执行过程中,使用断点单步执行上述操作,currentID=1。当MonoDroid在父组下创建控件的子组并且currentID始终为=1时,会重复调用上述方法。我还尝试在整个类中创建currentID和randomizer作为私有静态变量。同样的结果 编辑:我试图创建新的随机实例,其种子值在每次调用GetChildView时都不同。上面对代码进行了编辑,以显示我是如何做到这一点的。currentID的值始终为=1。下面是随机数发生器的本地信息屏幕截图。无论种子数是多少,此信息看起来都是相同

在整个执行过程中,使用断点单步执行上述操作,currentID=1。当MonoDroid在父组下创建控件的子组并且currentID始终为=1时,会重复调用上述方法。我还尝试在整个类中创建currentID和randomizer作为私有静态变量。同样的结果

编辑:我试图创建新的随机实例,其种子值在每次调用GetChildView时都不同。上面对代码进行了编辑,以显示我是如何做到这一点的。currentID的值始终为=1。下面是随机数发生器的本地信息屏幕截图。无论种子数是多少,此信息看起来都是相同的


随机化发生器使用系统时间(毫秒)计算。所以,如果你快速地调用它,也就是在相同的毫秒内,它们被植入相同的数字,从而产生相同的随机数

你试过给随机化者喂种子吗?是的。同样的结果。另外,我的理解是,在我的示例中使用seed将在每次迭代中生成相同的数字。该号码正用于对象的ID,需要唯一。我不明白你在问我什么。我希望它使用DateTime创建一个新的随机对象,然后在GetChildView的下一次迭代之前抓取下一个随机数5次,此时将根据当前的DateTime创建一个新的随机对象。@jmease您是否看到过这个
@DmitriyReznik
@jmease-了解一下随机类是如何工作的,您使用它是错误的,您需要使用一个保证每次事件发生时都会更改的值对其进行种子设定,或者在事件发生时将其初始化一次并对其进行种子设定,然后简单地调用下一个随机数。是的,但我只创建了一个随机对象,并在创建新对象之前对其调用了下一个方法5次。即使在同一毫秒内创建了下一个新的随机对象,该单个对象的值是否会随着每次对Next的调用而改变?@jmease该代码在.NET 4.0上运行良好,使用默认的基于时间的种子进行种子设定,或者其他方式。这似乎是一个特定于平台的问题。@RichardHein,我担心你可能是对的。到目前为止,MonoDroid有点像马车。我决定只使用递增的seed变量来分配唯一的id,而不是使用Random类。似乎达到了目的。
public class ExpAdapter : BaseExpandableListAdapter
{
  private int seed = 1000;

  public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
    {
        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);
            convertView = inflater.Inflate(Resource.Layout.inspection_row_2, null);
        }

        int currentID;
        Random randomizer = new Random(seed);

        TextView question = (TextView) convertView.FindViewById(Resource.Id.questionText);
        RadioGroup radio = (RadioGroup) convertView.FindViewWithTag("actionGroup");
        currentID = randomizer.Next(1,101);
        radio.Id = currentID;
        RadioButton pass = (RadioButton) convertView.FindViewWithTag("passed");
        currentID = randomizer.Next(1,101);
        pass.Id = currentID;
        RadioButton fail = (RadioButton) convertView.FindViewWithTag("failed");
        currentID = randomizer.Next(1,101);
        fail.Id = currentID;
        RadioButton correct = (RadioButton)convertView.FindViewWithTag("corrected");
        currentID = randomizer.Next(1,101);
        correct.Id = currentID;
        RadioButton na = (RadioButton)convertView.FindViewWithTag("na");
        currentID = randomizer.Next(1,101);
        na.Id = currentID;

        string[][] items = questions.childItems();
        question.Text = items[groupPosition][childPosition];

        seed++;

        return convertView;
    }
}