我的C#编程书上有一项任务,我需要编写一个:
"从键盘读取两个数字的程序,如果数字1大于,等于或小于数字2,则打印。
我认为我不能使用if语句的原因是因为它们尚未被涵盖。在本书教授if语句之前,会给出此任务。我一直在试图解决这个问题,我需要使用吗?运营商..?如果它只询问它是否小于或大于,小于或等于或等于或大于2,那将很容易,但现在有3种不同的东西。
这本书已经上过课了吗?运算符,但不是CompareTo。我不相信它让我猜测if语句的存在,因为它中的所有任务应该能够完全用已经教过的东西来解决。本书即将在本任务的下一页上教授if语句。
这是我得到的最远的:P
int number1 = Convert.ToInt32(Console.ReadLine());
int number2 = Convert.ToInt32(Console.ReadLine());
答案 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 comparison和http://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。