【发布时间】:2014-12-08 01:56:23
【问题描述】:
是否可以在每次迭代时使用新值迭代嵌套的 if 语句?我正在尝试构建一个一维元胞自动机(对于家庭作业,我不能否认)而且我对 C# 完全陌生,因为下面的代码无疑会保证。我尝试使用最简单、最基础的 DIY 方法来创建这个程序,但我已经陷入了困境。
我有一个长度为 8 的 1 和 0 的字符串,比如说
string y;
y = "11110000";
我想将此设置分解为 8 个子字符串集合,每组 3 个,每个集合由 y 中的一个值及其两侧的单个值组成。因此,从 0 开始计数,第 3 组将是 110,第 7 组将是 001。但是,子字符串只会提供第 1 到第 6 组,因为我无法根据自己的喜好将它们围绕 y 循环,因此我定义了以下内容-
y1=y.Substring(7,1)+y+y.Substring(0,1);
使用 y1 我能够取出所有必要的子字符串。这些基本上定义如下-
string a0, a1, a2, a3, a4, a5, a6, a7;
a0 = y1.Substring(0, 3);
a1 = y1.Substring(1, 3);
a2 = y1.Substring(2, 3);
a3 = y1.Substring(3, 3);
a4 = y1.Substring(4, 3);
a5 = y1.Substring(5, 3);
a6 = y1.Substring(6, 3);
a7 = y1.Substring(7, 3);
在这个程序中,下一代元胞自动机的规则由用户决定——也就是说,用户可以为所有迭代选择子字符串,比如 111->0 或 1。我以下列方式为每个子字符串使用了(非常多的)if 表
{
if (a0=="000")
{
Console.Write(a);
}
else if (a0=="001")
{
Console.Write(b);
}
else if (a0 =="010")
{
Console.Write(c);
}
else if (a0 == "011")
{
Console.Write(d);
}
else if (a0 == "100")
{
Console.Write(e);
}
else if (a0 == "101")
{
Console.Write(f);
}
else if (a0 == "110")
{
Console.Write(g);
}
else if (a0 == "111")
{
Console.Write(h);
}
}
其中 a,b,c,d,e,f,g,h 是整数,是用户选择的规则。例如,假设用户决定每个集合 000 应该产生一个 1 值,然后 a=1。 b 对应于 {0,0,1},c 对应于 {0,1,0},依此类推。然而,这种方法的一个相当明显的问题是,我最终只能得到 1 代 int 我无法获得。我很想用新一代替换 y1 (转换为字符串)。如果这不可能,请告诉我!
【问题讨论】:
-
尝试使用 int.parse 和之后的 .ToString ,然后你可以使用某种运行索引
-
这不是您问题的答案,但您采取了错误的方法。尝试重新阅读您发布的链接并了解元胞自动机背后的数学。老实说,这比你做的要容易得多!
-
我毫不怀疑没有更简单的方法,但对我来说它是最直观的。我真的,真的不熟悉 C# 和整个编程,如果表有点像我的作案手法(拉丁语?)暂时(墨西哥)。
标签: c# visual-studio-2012 if-statement cellular-automata