【问题标题】:Defining boolean local variables定义布尔局部变量
【发布时间】:2015-11-19 16:30:57
【问题描述】:

注意:这是我第一次使用“堆栈溢出”,我对 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();
    }

我在网上查看了一些文章,以及“堆栈溢出”帖子:Why compile error "Use of unassigned local variable"?。在得知局部变量没有被初始化(并且必须被赋予一个值)之后,我将“isDivisible”的布尔值默认设置为true。

问题:

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

谢谢!

【问题讨论】:

    标签: c# local-variables


    【解决方案1】:

    您在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
        {
            ...
        }
    

    【讨论】:

    • 感谢您帮助我简化和编辑我目前编写的内容!我还在学习。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 只是补充一点,当你写 bool isDivisible;默认情况下它将设置为 false,因为 bool 是不可为空的类型,这意味着不需要显式指定。
    • @P.Janowski:在 C# 中,您必须为局部变量指定一个初始值。它们没有为您初始化。
    • 请注意,类成员变量并非如此。成员变量初始化为默认值/零值。
    • @P.Janowski 你为什么不去试试这个:bool z; Console.WriteLine(z); 看看会发生什么。
    • 感谢大家的帮助!绝对有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 2016-09-13
    • 1970-01-01
    • 2012-03-29
    • 2017-08-29
    • 1970-01-01
    • 2013-04-29
    • 2013-04-24
    相关资源
    最近更新 更多