大家好,请教个问题,我在C#中用随机数这个类来产生随机数,为什么每次产生的都是那几个数,而不是变化的数呢?在我写的一个冒泡排序算法,无论我运行多少次,那几个数都是不变的(大家可以那去编译运行下看),我在C语言中也用国那个随机数,但是在C语言中,每次运行它产生的数都是不一样的,如果我要在C#中用随机数这个类,来实现和c语言中随机数这个东西一样的功能,我要如何来做呢?下面是代码示例:using System;
using System.Collections;
class Array1
{
private int [] arr;
private int numElement;
private int upperBound;
public Array1(int size)
{
arr=new int [size];
upperBound=size-1;
numElement=0;
}
public void DisplayElement()
{
foreach (int i in arr)
{
Console.Write("{0} ",i);
}
Console.WriteLine();
}
public void Insert(int items)
{
arr[numElement]=items;
numElement++;
}
public void Clear()
{
for (int i=0;i<arr.Length;i++)
{
arr[i]=0;
}
numElement=0;
}
public void BubbleSort()
{
int temp;
for (int i=0;i<10;i++)
{
for (int k=1;k<10;k++)
{
if (arr[k]<arr[k-1])
{
temp=arr[k-1];
arr[k-1]=arr[k];
arr[k]=temp;
}
}
DisplayElement();
Console.WriteLine();
}
}
}
class Test
{static void Main ()
{
Array1 arr=new Array1(10);
Random r=new Random(100);
for (int i=0;i<10;i++)
arr.Insert((int)(r.NextDouble()*100));
Console.WriteLine("Before sorting:");
arr.DisplayElement();
Console.WriteLine("During sorting :");
arr.BubbleSort();
Console.WriteLine("After sorting");
arr.DisplayElement();
}
}
如果代码写的不好,希望大家给出改进的意见。谢谢!

解决方案 »

  1.   

    C#自身带一个产生随机数的类,只要调用即可!
    例如产生1-99的随机数,
            Random r = new Random();
            int i=r.Next(0,100);
      

  2.   

       Random r = new Random(DateTime.Now.Millisecond);
            Response.Write(r.Next().ToString());
      

  3.   

    不重复随机数
    private Random ra = new Random(DateTime.Now.Millisecond);
    public float[] GetRandomNum(float[] Nums, int N)
        {
            if (Max < N) N = Max;
            List<int> lst1= new List<int>();
            List<int> lst2= new List<int>();
            for (int i = 0; i < Nums.Length; i++) lst1.Add(Nums[i]);
            Random R = new Random();
            for (int n = 0; n < N; n++)
            {
                int r = R.Next(0, lst1.Count);
                lst2.Add(lst1[r]); lst1.RemoveAt(r);
            }
            lst2.Sort(); 
            return lst2.ToArray();
        }
      

  4.   

    冒泡算法 k=1的话不对吧,应该k=i+1,
    其它的各位大大都提到了,我就学习了。:)
      

  5.   


    static Random rnd=new Random(100);
    static void Main () 

    Array1 arr=new Array1(10); 
    for (int i=0;i <10;i++) 
    arr.Insert((int)(rnd.NextDouble()*100)); 
    Console.WriteLine("Before sorting:"); 
    arr.DisplayElement(); 
    Console.WriteLine("During sorting :"); 
    arr.BubbleSort(); 
    Console.WriteLine("After sorting"); 
    arr.DisplayElement(); 
    } 就这么简单,明白了吗?
      

  6.   

    Sorry,删除100,是:static Random rnd=new Random();
    static void Main () 

    Array1 arr=new Array1(10); 
    for (int i=0;i <10;i++) 
    arr.Insert((int)(rnd.NextDouble()*100)); 
    Console.WriteLine("Before sorting:"); 
    arr.DisplayElement(); 
    Console.WriteLine("During sorting :"); 
    arr.BubbleSort(); 
    Console.WriteLine("After sorting"); 
    arr.DisplayElement(); 

    千万不要写上100啊!
      

  7.   

    Random r = new Random(); 
      

  8.   

    另外,rnd.Next(100)就可以了啦,不需要乘以100的!
      

  9.   

    感谢各位给予的回复.谢谢!Thank you very much!
      

  10.   

     关键问题在于“Random rnd=new Random(100);”,这样写的话就把种子固定了,也就是每次生成时都把条件初始化了,所以生成的随机数都一样,一般写成“Random rnd=new Random();”即可,这样每次调用时系统都会自动生成一个随机种子。
      

  11.   

    这样就可以声称不重复的随机数
    private Random ra = new Random(DateTime.Now.Millisecond); 
    public float[] GetRandomNum(float[] Nums, int N) 
        { 
            if (Max < N) N = Max; 
            List <int> lst1= new List <int>(); 
            List <int> lst2= new List <int>(); 
            for (int i = 0; i < Nums.Length; i++) lst1.Add(Nums[i]); 
            Random R = new Random(); 
            for (int n = 0; n < N; n++) 
            { 
                int r = R.Next(0, lst1.Count); 
                lst2.Add(lst1[r]); lst1.RemoveAt(r); 
            } 
            lst2.Sort(); 
            return lst2.ToArray(); 
        } 
      

  12.   

    C#自身带一个产生随机数的类,只要调用即可! 
    例如产生1-99的随机数, 
            Random r = new Random(); 
            int i=r.Next(0,100);