练习的目的是检查点是否位于2D矩形的两侧。我得到了一些正确的输出。但我不知道为什么最后的"否则"当它应该被打印时似乎被忽略了。
源代码:
using System;
class pointOnBorder
{
static void Main()
{
var x1 = decimal.Parse(Console.ReadLine());
var y1 = decimal.Parse(Console.ReadLine());
var x2 = decimal.Parse(Console.ReadLine());
var y2 = decimal.Parse(Console.ReadLine());
var x = decimal.Parse(Console.ReadLine());
var y = decimal.Parse(Console.ReadLine());
if (x1 < x2 && y1 < y2)
{
if (x == x1 || x == x2)
{
if (y >= y1 && y <= y2)
{
Console.WriteLine("Border");
}
}
else if (y == y1 || y == y2)
{
if (x >= x1 && x <= x2)
{
Console.WriteLine("Border" );
}
}
else
{
Console.Write("Inside / Outside");
}
}
}
}
注意:&#34;边境&#34;没有任何问题。输出
我想打印&#34;内部/外部&#34;但它似乎没有成功(我得到空输出)。我曾在其他地方问过,有人建议说我的&#34;否则&#34;可能是在第一个&#34; if&#34;,至于可以看出情况并非如此,因此我没有看到为什么我的决赛&#34;否则&#34;子句被忽略。
提前致谢! :)
答案 0 :(得分:0)
如果您想涵盖所有可能的情况,则每个if
都应该有相应的else
。我只看到5 else
只有3 if
。
答案 1 :(得分:0)
您可以尝试关闭if
关键字上方的else if
括号,而不是else if
写else
。
答案 2 :(得分:0)
您的代码过于复杂。
我会简化它:
// this is a conditional assignment -
// if the condition is true, pointLocation would be assigned with "Border".
// if it's false, it will be assigned with "Inside / Outside".
// It's a short way to write if...else statements - condition ? true : false ;
var pointLocation = (
(IsValueEqualToStartOrToStop(x1, x2, x) && IsValueBetweenStartAndStop(y1, y2, y)) ||
(IsValueEqualToStartOrToStop(y1, y2, y) && IsValueBetweenStartAndStop(x1, x2, x))) ? "Border" : "Inside / Outside";
Console.WriteLine(pointLocation);
// this method checks that the value is equal to start or to stop.
bool IsValueEqualToStartOrToStop(decimal start, decimal stop, decimal value)
{
return value == start || value == stop;
}
// this method checks if the value is between start and stop
bool IsValueBetweenStartAndStop(decimal start, decimal stop, decimal value)
{
return (start < stop && start <= value && value <= stop) ||
(start > stop && start >= value && value >= stop); value
}
答案 3 :(得分:0)
我想强调,这不是我写这个功能的方式。我同意您的代码过于复杂,但了解您可能希望修复代码以便查看错误,而不是完全重写,这是您修复的代码:
class pointOnBorder{
static void Main(){
var x1 = decimal.Parse(Console.ReadLine());
var y1 = decimal.Parse(Console.ReadLine());
var x2 = decimal.Parse(Console.ReadLine());
var y2 = decimal.Parse(Console.ReadLine());
var x = decimal.Parse(Console.ReadLine());
var y = decimal.Parse(Console.ReadLine());
if (x1 < x2 && y1 < y2)
{
if (x == x1 || x == x2)
{
if (y >= y1 && y <= y2)
{
Console.WriteLine("Border");
}
else
{
Console.Write("Inside / Outside");
}
}
else if (y == y1 || y == y2)
{
if (x >= x1 && x <= x2)
{
Console.WriteLine("Border");
}
else
{
Console.Write("Inside / Outside");
}
}
else
{
Console.Write("Inside / Outside");
}
}
else{
Console.Write("Bad rectangle specification.");
}
}
}