比较两个数字(大于,等于或小于)而不使用if语句

时间:2018-04-06 23:19:22

标签: c#

我的C#编程书上有一项任务,我需要编写一个:

  

"从键盘读取两个数字的程序,如果数字1大于,等于或小于数字2,则打印。

我认为我不能使用if语句的原因是因为它们尚未被涵盖。在本书教授if语句之前,会给出此任务。我一直在试图解决这个问题,我需要使用吗?运营商..?如果它只询问它是否小于或大于,小于或等于或等于或大于2,那将很容易,但现在有3种不同的东西。

这本书已经上过课了吗?运算符,但不是CompareTo。我不相信它让我猜测if语句的存在,因为它中的所有任务应该能够完全用已经教过的东西来解决。本书即将在本任务的下一页上教授if语句。

这是我得到的最远的:P

int number1 = Convert.ToInt32(Console.ReadLine());

int number2 = Convert.ToInt32(Console.ReadLine());

4 个答案:

答案 0 :(得分:3)

  

我认为我不能使用if语句的原因是因为它们尚未被涵盖。

这是一个非常合理的假设。

在条件语句之前覆盖条件表达式是一个有趣的教学选择,但它完全有效。

  

我需要使用?运算符吗?

是的。这是条件运算符,因此如果您表达的是有条件运行的逻辑,请使用它。

  

如果只询问它是否小于或大于,小于或等于或等于或大于2,那将很容易,但现在有3种不同的东西。

是的。这里的见解是条件运算符的形式是:

condition ? consequence : alternative

运算符生成,其中三个操作数也是。由于条件运算符生成值,而生成值,因此您可以嵌套它们。例如:

condition ? 
  (condition ? consequence : alternative) : 
  alternative

或者

condition ? 
  consequence :
  (condition ? consequence : alternative)

现在有三个个地方,而不是两个。

当然,你可以拥有任意数量的人:

condition ? 
  (condition ? consequence : alternative) : 
  (condition ? consequence : alternative)

但是像这样的嵌套条件通常被认为是不好的风格,因为它们很难阅读。

这能让您深入了解如何解决问题吗?

  

这是我得到的最远的:P

int number1 = Convert.ToInt32(Console.ReadLine());
int number2 = Convert.ToInt32(Console.ReadLine());

对于一个完整的初学者来说,这是一个合理的代码,但你很快就会知道我希望它的风格非常糟糕,因为它很容易崩溃。如果您的用户输入的数字,那么您的程序就会终止。

更好的方法是使用TryParse,并再次询问用户输入的输入是否错误。但是,由于您可能还没有学过循环,因此您将无法编写该代码。

您的下一行代码应为:

string message = some conditional logic;
Console.WriteLine(message);

你能填写逻辑吗?

答案 1 :(得分:1)

嗯,您的要求明确表明不使用if语句,因此我没有看到不使用它的原因。但是,你知道的比我好,我会让你决定是否使用它。

或者,您可以使用这样的三元操作:

string result = number1 > number2 ? $"number {number1} is greater"
                : number2 > number1 ? $"number {number2} is greater" 
                : $"number {number1} and number {number2} are equal";
Console.WriteLine(result);

答案 2 :(得分:0)

对于您想要消除比较的案例,包括?:,这个答案可能不适合本书中的“if语句前”页面。

要删除代码中的所有可见条件,通常使用map(结果,操作)。在这种情况下,听起来像Int32.CompareTo的结果将是一个很好的起点,因为我们只有3个值(-1,0,1),简单数组(而不是Dictionary)将起作用。我们只需要将[-1,1]范围调整为[0,2]以用于索引数组:

 int value1 = 42;
 int value2 = 32;

 string[] messages = new[] { 
      "First less than second", // maps to -1
      "Both are equal", // maps to 0
      "First greater than second" // maps to 1
 };

 Console.WriteLine(messages[ 
      1 + value1.CompareTo(value2) // shift -1,1 range to 0,2
  ]);

如果您无法使用ComapreTo但可以使用位操作,则可以无条件地实现该操作(请参阅Comparing two integers without any comparisonhttp://graphics.stanford.edu/~seander/bithacks.html,下面的代码不太通用,因为我们知道{的大小{1}}位):

System.Int32

答案 3 :(得分:-1)

有三种不同的输出:大于,等于,小于。因此,即使允许条件陈述,它们也不是最好的选择。

int result = number1.CompareTo(number2);

如果结果是< 0,那么你知道number1小于number2。 如果结果为0,那么您知道number1等于number2。 如果结果是> 0,那么你知道number1大于number2。

Documentation