zhongdazui 2015-08-19 10:30 采纳率: 62.5%
浏览 1474
已采纳

在练习里氏转换碰到的问题

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:直接调试时,效果是不同的“我是**”。
逐语句或逐过程时,效果却又是相同的“我是**”。
其中原因是?各位大神,我初学。求多多指教。

  • 写回答

3条回答 默认 最新

  • 杨超大帝 2015-08-19 10:44
    关注

    写在里面,每次会新创建一个Random对象,这些对象的初始种子一样,生成的序列也完全一样。你可以尝试在里面写这样把 j 当作种子去构造这些Random对象,数字序列就不一样了。
    写在循环里,性能会很低。另外每次运行,生成序列是一样的。可以在循环外写:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境