初学者 c# 麻烦

本文关键字:麻烦 初学者 | 更新日期: 2023-09-27 18:21:39

我是c#的新手,我遇到了一个小问题。我想制作一个简单的程序,要求用户输入 1-50 之间的整数,然后在控制台上显示它是否是奇数。所以,我尝试的是这样的:

 Console.WriteLine("Skriv ut ett heltal: ");
 int x = int.Parse(Console.ReadLine());
 if (x == 1,3,5,7,9,11,13,15,17,19)
 {
     Console.WriteLine("The number is odd");
 }
 else 
 {
     Console.WriteLine("The number is not odd");
 }

现在我在 if 语句条件下收到错误。我该如何解决这个问题?

初学者 c# 麻烦

C# 不允许指定多个值来检查变量是否使用单个 if 语句。 如果你想这样做,你需要单独检查每个值(1、3、5 等(,这将是很多多余的类型。

在这个特定示例中,检查某物是否奇数或偶数的更简单方法是使用模运算符%检查除以 2 后的余数:

if (x % 2 == 1)
{
   Console.WriteLine("The number is odd");
}
else 
{
    Console.WriteLine("The number is even");
}

但是,如果您确实需要检查列表,那么简单的方法是在数组上使用 Contains 方法(实际上是ICollection<T>(。 为了使它变得漂亮和简单,你甚至可以编写一个扩展函数,让你以一种语法上漂亮的方式检查列表:

public static class ExtensionFunctions
{
    public static bool In<T>(this T v, params T[] vals)
    {
        return vals.Contains(v);
    }
}

然后你可以说:

if (x.In(1,3,5,7,9,11,13,15,17,19)) 
{
    Console.WriteLine("The number is definitely odd and in range 1..19");
}
else 
{
    Console.WriteLine("The number is even, or is not in the range 1..19");
}

瞧! :)

if(x % 2 == 0)
{
// It's even
}
else
{
// It's odd
}
如果要

测试x是否为特定列表中的数字:

int[] list = new int[]{ 1,3,5,7,9,11,13,15,17,19};
if(list.Contains(x)) 
检查

整数是否为奇数的常用方法是检查它是否均匀地除以 2:

if(x % 2 == 1)
x == 1,3,5,7,9,11,13,15,17,19不是

表示多个选项的有效语法。如果你真的想这样做,那么你可以使用switch语句:

 switch(x) {
     case 1:
     case 3:
     case 5:
     case 7:
     case 9:
     case 11:
     case 13:
     case 15:
     case 17:
     case 19:
          // is odd
          break;
     default:
          // is even
          break;
 }

正确的方法是使用取模运算符%来确定一个数字是否完全能被 2 整除,而不是尝试每个奇数,如下所示:

if( x % 2 == 0 ) {
   // even number
}  else {
   // odd number
}

这不是有效的 C#。你不能像这样测试集包含。无论如何,测试世界上所有的数字是不切实际的。

你为什么不这样做呢?

if (x &1 == 1) // mask the 1 bit

按位运算非常快,因此代码应该非常快。

如果您有多个条件,您的 if 语句应该是这样的:

如果满足以下任一条件之一:

if(x == 1 || x == 3 || x == 5) 
{
    //it is true
}

如果所有条件都必须为真:

if(x == 1 && y == 3 && z == 5) 
{
    //it is true
}

但是,如果您只寻找奇数/偶数。使用另一个答案所说的%运算符。

虽然,正如其他人指出的那样,这不是解决此问题的最佳方法,但在这种情况下出现错误的原因是因为 if 语句中不能有多个这样的值。你必须这样说:

if (x == 1 || x == 3 || x == 5)

如果您不知道,||是"或"的符号

尝试以下操作:

Console.WriteLine("Skriv ut ett heltal: ");
int x = int.Parse(Console.ReadLine());
Console.WriteLine(x % 2 == 1 ? "The number is odd" : "The number is not odd");

x % 2 == 1 在输入上做模数为 2(尽可能多地去除 '2,直到数字介于 0 和 2 之间 - 所以在这种情况下是 0 或 1(

一种方法是:

if (x == 1 || 3 || 5){ 
Console.writeLine("oddetall");
}

或者可以创建一个数组 []

int[] odd = new int[3]; // how many odd to be tested
if(x=odd){
Console.WriteLine("Oddetall");
}

此答案的最佳做法是对用户输入进行一些验证,例如使用 int。TryParse(( 方法,检查用户输入的值是否确实是整数并执行其他操作,而不是使程序崩溃。

法典:

        Console.WriteLine("Enter an integer between 1 and 50: ");
        bool validInteger = int.TryParse(Console.ReadLine(), out int x);
        
        /*The int.TryParse() method will return a boolean value of true if                             
        the user input is an integer, as well as store the valid 
        integer as an int variable named x. Otherwise it will return 
        false if the user enters anything other than an int value.*/
        if (validInt)
        {
            /* The modulo operator (%, also called the remainder operator)
            checks if there is a remainder after dividing the value by 2 */
            if (x % 2 == 0) 
            {
                Console.WriteLine("The number is even");
            }
            else
            {
                Console.WriteLine("The number is odd");
            }
        }
        else 
        { 
            Console.WriteLine("Please enter a valid integer only!! "); 
        }

编写此代码的另一种方法是在 while 循环中运行代码,如果输入不是整数,该循环会继续提示用户输入值。

法典:

        bool validInteger;
        while (true)
        {
            Console.WriteLine("Enter an integer between 1 and 50: ");
            validInteger = int.TryParse(Console.ReadLine(), out var y);
            if (validInteger)
            {
                if (y % 2 == 0)
                {
                    Console.WriteLine("The number is even");
                }
                else
                {
                    Console.WriteLine("The number is odd");
                }
                /* The break statement will exit the loop once the program 
                receives a valid input */
                break;
            }
          else 
            {
                Console.WriteLine("Please enter a valid integer");
            }
        }   
   

此方法将继续提示用户输入,直到收到有效的整数。尽管使用嵌套的 if 语句通常并不理想,并且会减慢大型应用程序的编译时间,但对于这样的基本任务,它是完全可以接受的。