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();

正在运行的程序只写出暗红色的数字

c# IF /控制台.编写需求解决方案

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] >= mint[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];

和两个值(minmax)得到相同的值!从这里开始,所有进一步的if条件都变成了true,因为你基本上将t[i, j]的值与min的值进行比较,无论你添加的数字是多少

if (t[i, j] == (min + 2.0 * (max-min) / 5.0))

由于maxmin具有相同的值,所以您总是添加0,因此每个条件都是相同的。最后一个被执行。