使用非常基本的if语句比较数字

时间:2019-01-15 04:44:41

标签: c# if-statement

我希望用户输入3个独立的整数,并让程序吐出哪些数字彼此相等,如果它们彼此不相等。对于我的代码,我可以说它们彼此相等,并且前两个相等,但第一个和第三个不相等。我认为这是因为我的else语句未正确放在花括号中。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace Compare3Numbers
{
    class Program
    {
        static void Main(string[] args)
        {


            int number1;
            int number2;
            int number3;

            Write("Enter the first number: ");
            number1 = int.Parse(ReadLine());

            Write("Enter the second number: ");
            number2 = int.Parse(ReadLine());

            Write("Enter the third number: ");
            number3 = int.Parse(ReadLine());

            if (number1 == number2 && number2 == number3)
            {
                if (number2 == number3)
                {
                    WriteLine("All your numbers are equal!");
                }
                else if (number1 == number2)
                {
                    WriteLine("Your first two numbers are equal!");
                }

                else if (number1 == number3)
                {
                    WriteLine("Your first number and third number are equal!");
                }
                else if (number2 == number3)
                {
                    WriteLine("Your second number is equal to your third number!");
                }
            }





            //debug line
            WriteLine("Press any key to continue...");
            ReadLine();
        }
    }
}

5 个答案:

答案 0 :(得分:4)

if (number1 == number2 && number2 == number3)
  // all
else if (number1 == number2)
  // first second
else if (number1 == number3)
  // first last
else if (number2 == number3)
  // second last
else
  // all broken

其他阅读

if-else (C# Reference)

答案 1 :(得分:0)

这样看

if (number1 == number2)
{
//rest of your if statements
}

由于1和2 arent不等于if语句将执行的内容。您需要检查数字1 ==数字3。

答案 2 :(得分:0)

仅当前两个数字相等时,才会编写代码中的消息。并且没有检查将对第一个和第三个,第二个和第三个数字运行。

尝试逐步调试代码以查看路径。

我建议您使用代码分析器。 Sonar Lint将显示“双重比较相同条件”的问题。

在第二行

if (number1 == number2)

您将获得:

  

警告S2583更改此条件,以使其始终不等于“ true”;某些后续代码将永远不会执行。

正确的代码如下所示:

if (number1 == number2)
{
     if (number2 == number3)
    {
        WriteLine("All your numbers are equal!");
    }
    else
    {
        WriteLine("Your first two numbers are equal!");
    }
}
else
{
    if (number1 == number3)
    {
        WriteLine("Your first number and third number are equal!");
    }
    // there is no need for else, because this would mean, that (number1 == number2) and this is the part, where these number differs
    if (number2 == number3)
    {
        WriteLine("Your second number and third number are equal!");
    }
}

答案 3 :(得分:0)

“ n”个数字的通用方法(继续插入数字直到遇到“ q”)

static void Main(string[] args)
{
    var numbers = new List<int>();
    var run=true;
    while(true)
    {
        var input = Console.ReadLine();
        if(input.Equals("q"))
        {
            break;
        }

        if(Int32.TryParse(input,out var value))
        {
            numbers.Add(value);
        }
    }

    var result = numbers
                .Select((t,i) => new { Index = i, Value = t })
                .GroupBy(g => g.Value)
                .Where(g => g.Count() > 1);
    foreach(var group in result)
    {
        var groupItems = group.ToList();
        Console.WriteLine($"Your {string.Join(", ",groupItems.Take(groupItems.Count()-1).Select(x=> AddOrdinal(x.Index+1)))} and {AddOrdinal(groupItems.Last().Index+1)} are equal");
    }

}

public static string AddOrdinal(int num)
{
    if( num <= 0 ) return num.ToString();

    switch(num % 100)
    {
        case 11:
        case 12:
        case 13:
            return num + "th";
    }

    switch(num % 10)
    {
        case 1:
            return num + "st";
        case 2:
            return num + "nd";
        case 3:
            return num + "rd";
        default:
            return num + "th";
    }

}

PS:从samjudson's Answer借用AddOrdinal

示例,用于输入

1,2,3,4,5,6,1,2,3,1,2,3,1

输出

Your 1st, 7th, 10th and 13th are equal
Your 2nd, 8th and 11th are equal
Your 3rd, 9th and 12th are equal

答案 4 :(得分:-1)

我会这样:

var dictionary = new Dictionary<string, bool>
{
   { "Your first two numbers are equal!", Math.Abs(number1 - number2) == 0 },
   { "Your second number is equal to your third number!", Math.Abs(number2 - number3) == 0 },
   { "Your first number and third number are equal!", Math.Abs(number3 - number1) == 0 }
};

var output = dictionary.Where(i => i.Value).ToList();
var message = output.Count == 3 ? "All your numbers are equal!" : output.FirstOrDefault(i => i.Value).Key;            
            Console.WriteLine(message);