2015-11-19 31 views
0

注:这是使用“堆栈溢出”我第一次和我是比较新的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。

问:

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

谢谢!

回答

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 
    { 
     ... 
    } 
+0

感谢您帮助我简化和编辑我目前编写的内容!仍然在学习我的结局。 – ITSUUUUUH

2

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

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

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

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

+0

只是要补充的,当你写布尔isDivisible;它会被默认设置为false,因为bool是非空类型,这意味着明确指定是不必要的。 –

+3

@ P.Janowski:在C#中,你*必须*为本地指定一个初始值。他们没有为你初始化。 –

+1

请注意,对于类成员变量也是如此。成员变量*被初始化为默认值/零值。 –