程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> random-在練習裡氏轉換碰到的問題

random-在練習裡氏轉換碰到的問題

編輯:編程綜合問答
在練習裡氏轉換碰到的問題

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Person[] a = new Person[3];
Random sum = new Random();//位置1
for (int i = 0; i < a.Length; i++)
{
//位置2
int b = sum.Next(1, 4);
switch (b)
{
case 1:
a[i] = new Student();
break;
case 2:
a[i] = new Yeshou();
break;
case 3:
a[i] = new Person();
break;
}
}
for (int i = 0; i < a.Length; i++)
{
if (a[i] is Student)
{
((Student)a[i]).StudentHi();
}
else if (a[i] is Yeshou)
{
((Yeshou)a[i]).YeshouHi();
}
else
{
a[i].PersonHi();
}
}
Console.ReadKey();
}

    class Person
    {
        public void PersonHi()
        {
            Console.WriteLine("我是人類。");
        }
    }
    class Student : Person
    {
        public void StudentHi()
        {
            Console.WriteLine("我是學生。");
        }
    }
    class Yeshou : Person
    {
        public void YeshouHi()
        {
            Console.WriteLine("我是野獸。");
        }
    }
}

}
希望實現的效果:顯示不同的 “我是**”。
異常情況:Ramdom那句話,我以為放在位置1和位置2效果是一樣的。但是
放在位置1:效果實現。
放在位置2:直接調試時,效果是不同的“我是**”。
逐語句或逐過程時,效果卻又是相同的“我是**”。
其中原因是?各位大神,我初學。求多多指教。

最佳回答:


寫在裡面,每次會新創建一個Random對象,這些對象的初始種子一樣,生成的序列也完全一樣。你可以嘗試在裡面寫這樣把 j 當作種子去構造這些Random對象,數字序列就不一樣了。
寫在循環裡,性能會很低。另外每次運行,生成序列是一樣的。可以在循環外寫:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved