定义布尔局部变量

时间:2015-11-19 16:30:57

标签: c# 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();
    }

我在网上看过一些文章,以及&#34; Stack Overflow&#34;发布:Why compile error "Use of unassigned local variable"?。在得知局部变量未初始化(并且必须给出值)之后,我将&#34; isDivisible&#34;设置为bool值。默认情况下等于true。

问题:

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

谢谢!

2 个答案:

答案 0 :(得分:3)

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 % 10 == 5) || (sum % 10 == 0)而不是sum % 5 == 0

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

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

你可以使用:

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

答案 1 :(得分:2)

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

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

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

这并不适用于所有情况。有时,很难将比较操作简化为简单表达。但是,它通常是初始化bool的方便方法。