c# IF /控制台.编写需求解决方案
本文关键字:需求 解决方案 控制台 IF | 更新日期: 2023-09-27 18:13:32
我正在尝试用IF命令在间隔内写出随机数,并在每种情况下使用不同的颜色。
int x = -50, y = -38;
int min = 999, max = -999, sum = 0;
Random rnd = new Random();
int[,] t = new int[20, 20];
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
t[i, j] = rnd.Next(x, y);
if (min > t[i, j])
min = t[i, j];
if (max < t[i, j])
max = t[i, j];
sum += t[i, j];
if ( t[i, j] == min)
if (t[i, j] == (min + 1.0 * (max - min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.DarkBlue;
}
if (t[i, j] == (min + 1.0 * (max - min) / 5.0))
if (t[i, j] == (min + 2.0 * (max - min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.Cyan;
}
if (t[i, j] == (min + 2.0 * (max-min) / 5.0))
if (t[i, j] == (min + 3.0*(max-min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.Magenta;
}
if (t[i, j] == (min+ 3.0 *(max-min) / 5.0))
if (t[i, j] == (min + 4.0 * (max - min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.Red;
}
if (t[i, j] == (min + 4.0 * (max - min) / 5.0))
if (t[i, j] == max)
{
Console.ForegroundColor = ConsoleColor.DarkRed;
}
Console.Write(" " + t[i, j]);
//Console.Write("{2} ", i, j, t[i, j]);
}
x++;
y++;
}
Console.WriteLine("Min: " + min);
Console.WriteLine("Max: " + max);
Console.WriteLine("Sum: " + sum / t.Length);
Console.ReadKey();
正在运行的程序只写出暗红色的数字
Mong Zhu的答案显示了第一个循环中发生的事情。t[i, j] == min == max
so
if (t[i, j] == (min + 4.0 * (max - min) / 5.0))
if (t[i, j] == max)
总是被求值为true,因为函数简化为
if (t[i, j] == (min + 4.0 * (0) / 5.0))
if (t[i, j] == max)
进一步简化为
if (t[i, j] == (min + 0))
if (t[i, j] == max)
因为在第一个循环t[i, j] == min == max
中它进一步简化为
if (t[i, j] == t[i, j])
if (t[i, j] == t[i, j])
这将永远是正确的。
在以后的循环中,(max - min)
将不为0。因为像
if ( t[i, j] == min)
if (t[i, j] == (min + 1.0 * (max - min) / 5.0))
不可能有两个if
语句都为真,因为
min == (min + 1.0 * (max - min) / 5.0)
除非max - min
为0。
您可能想要测试大于和小于。这里有一个这样做的例子,我也将把你的if
语句合并到一个语句中,并根据需要使用else if
,使其更容易阅读。
(UPDATE:我删除了t[i, j] >= min
和t[i, j] <= max
,因为该值永远不能为假。所有数字总是等于或大于最小值(或等于或小于最大值)
for (int j = 0; j < 20; j++)
{
t[i, j] = rnd.Next(x, y);
if (min > t[i, j])
min = t[i, j];
if (max < t[i, j])
max = t[i, j];
sum += t[i, j];
if ( t[i, j] < (min + 1.0 * (max - min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.DarkBlue;
}
else if (t[i, j] < (min + 2.0 * (max - min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.Cyan;
}
else if (t[i, j] < (min + 3.0*(max-min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.Magenta;
}
else if (t[i, j] < (min + 4.0 * (max - min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.Red;
}
else
{
Console.ForegroundColor = ConsoleColor.DarkRed;
}
Console.Write(" " + t[i, j]);
//Console.Write("{2} ", i, j, t[i, j]);
}
这会导致一个行为改变。你的第一件物品现在将是DarkBlue
而不是DarkRed
。如果你想保持暗红色的行为,只需将第一个If改为
if (min == max)
{
Console.ForegroundColor = ConsoleColor.DarkRed;
}
else if ( t[i, j] < (min + 1.0 * (max - min) / 5.0))
{
Console.ForegroundColor = ConsoleColor.DarkBlue;
}
我认为你的主要问题是:
当生成介于-38和-50之间的随机数时:
t[i, j] = rnd.Next(x, y);
这些条件总是变为true
if (min > t[i, j])
min = t[i, j];
if (max < t[i, j])
max = t[i, j];
和两个值(min
和max
)得到相同的值!从这里开始,所有进一步的if条件都变成了true
,因为你基本上将t[i, j]
的值与min
的值进行比较,无论你添加的数字是多少
if (t[i, j] == (min + 2.0 * (max-min) / 5.0))
由于max
和min
具有相同的值,所以您总是添加0
,因此每个条件都是相同的。最后一个被执行。