我希望用户输入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();
}
}
}
答案 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
其他阅读
答案 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);