定义布尔局部变量

Defining boolean local variables

注意:这是我第一次使用 "Stack Overflow",我对 C# 比较陌生

(请原谅我目前编程水平不高)

我的代码:

static void Main(string[] args)
    {
        Challenge(5, 12);
    }
    static void Challenge(int num1, int num2)
    {
        //finds the sum of the two variables
        int sum = num1 + num2;
        Console.WriteLine("The sum of {0} and {1} is...\n{2}", num1, num2, sum);

        bool isDivisible = true;
        //checks if divisible by 5 and sets a value for 'isDivisible'
        if ((sum % 10 == 5) || (sum % 10 == 0))
        {
            Console.WriteLine("\nThe sum is divisible by 5!");
            isDivisible = true;
        }
        else if ((sum % 10 != 5) || (sum % 10 != 0))
        {
            Console.WriteLine("\nThe sum is not divisible by 5!");
            isDivisible = false;
        }

        //depending on value of 'isDivisible', returns certain functions
        if (isDivisible == true)
        {
            Console.WriteLine("This value is usable.");
            Console.WriteLine("\n\nThe remaining usable values are: ");

            for (int newVal = sum + 1; newVal <= 55; newVal++) // '+ 1' added to make sure 'sum' is not printed again
            {
                if ((newVal % 10 == 5) || (newVal % 10 == 0))
                {
                    Console.WriteLine(newVal);
                }
            }
        }
        else if (isDivisible == false)
        {
            Console.WriteLine("This value is not usable.");
            Console.WriteLine("\n\nThese values are considered usable: ");

            for (int newVal = 0; newVal <= 55; newVal++)
            {
                if ((newVal % 10 == 5) || (newVal % 10 == 0))
                {
                    Console.WriteLine(newVal);
                }
            }
        }
        Console.ReadLine();
    }

我在网上看了一些文章,还有 "Stack Overflow" post: Why compile error "Use of unassigned local variable"? 。在了解到局部变量没有被初始化(并且必须被赋予一个值)之后,我将 "isDivisible" 的 bool 值默认设置为 true 。

问题:

有没有更好的方法来定义一个布尔值的局部变量(至少在我在这里尝试 运行 的程序的情况下)?

谢谢!

C# 中的比较表达式将 return 一个布尔值,指示它们是否为真。因此,您可以将初始分配简化为:

bool isDivisible = ((sum % 10 == 5) || (sum % 10 == 0));

而不是明确地将其设置为 true 或 false。那么你的变量将总是被设置。

这并不适用于所有情况。有时,很难将比较操作简化为一个简单的表达式。但是,它通常是初始化 bools.

的便捷方式

你在else if中的条件是错误的,它不是第一个条件的补码,所以没有意义。正确的补充是:

else if ((sum % 10 != 5) && (sum % 10 != 0))

但是,您根本不需要使用 else if,您可以只使用 else,因为您想要捕获所有未被第一个条件捕获的情况。这也意味着您不必初始化布尔变量,因为编译器可以看到它总是由代码块之一设置:

    bool isDivisible;
    //checks if divisible by 5 and sets a value for 'isDivisible'
    if ((sum % 10 == 5) || (sum % 10 == 0))
    {
        Console.WriteLine("\nThe sum is divisible by 5!");
        isDivisible = true;
    }
    else
    {
        Console.WriteLine("\nThe sum is not divisible by 5!");
        isDivisible = false;
    }

旁注:您可以使用 sum % 5 == 0.

而不是 (sum % 10 == 5) || (sum % 10 == 0)

旁注 2:您不需要将布尔变量与 true 进行比较,您可以将其用作条件。此外,您也不需要 else if 。而不是这个:

    if (isDivisible == true)
    {
        ...
    }
    else if (isDivisible == false)
    {
        ...
    }

您可以使用:

    if (isDivisible)
    {
        ...
    }
    else
    {
        ...
    }