Сравнение чисел, используя очень простой оператор if - PullRequest
0 голосов
/ 15 января 2019

Я хочу, чтобы пользователь ввел 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 голосов
/ 15 января 2019

Я бы сделал это так:

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);
0 голосов
/ 15 января 2019

Общий подход для чисел '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: заимствование 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
0 голосов
/ 15 января 2019

Посмотрите на это так

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

Поскольку 1 и 2 не равны ничему внутри оператора if, они будут выполняться. Вам нужно проверить число 1 == число 3 вне этого.

0 голосов
/ 15 января 2019

Сообщение в вашем коде будет записано только тогда, когда первые два числа равны. И нет проверки, которая будет выполняться для первого и третьего, второго и третьего числа.

Попробуйте отладить ваш код шаг за шагом, чтобы увидеть путь.

Я бы порекомендовал вам использовать анализаторы кода. В задаче «двойное сравнение одного и того же условия» ваш код будет отображаться Sonar Lint.

На второй строке

if (number1 == number2)

Вы получите:

Предупреждение S2583 Измените это условие, чтобы оно не всегда оценивалось как «истинное»; некоторый последующий код никогда не выполняется.

Правильный код может выглядеть так:

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!");
    }
}
0 голосов
/ 15 января 2019
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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...