C#运动,输出不对

时间:2017-10-31 12:16:31

标签: c#

练习的目的是检查点是否位于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;子句被忽略。

提前致谢! :)

4 个答案:

答案 0 :(得分:0)

如果您想涵盖所有可能的情况,则每个if都应该有相应的else。我只看到5 else只有3 if

答案 1 :(得分:0)

您可以尝试关闭if关键字上方的else if括号,而不是else ifelse

答案 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.");
      }
   }
}