通过命令行从用户获取数据

时间:2013-08-24 21:06:56

标签: c# command-line

我希望有人在我的代码中输入长度和宽度的值,这是我到目前为止所得到的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Rectangle
    {
        double length;
        double width;
        double a;

        static double Main(string[] args)
        {
            length = Console.Read();
            width = Console.Read();
        }

        public void Acceptdetails()
        {

        }

        public double GetArea()
        {
            return length * width;
        }

        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }

    class ExecuteRectangle
    {
        public void Main()
        {
            Rectangle r = new Rectangle();

            r.Display();
            Console.ReadLine();
        }
    }
}

试图以错误的方式使用两个Main方法来解决这个问题吗?这是我从http://www.tutorialspoint.com/csharp/csharp_basic_syntax.htm复制的代码我试图修改它以获得更多使用这种编程语言的经验。

2 个答案:

答案 0 :(得分:4)

您的代码存在一些问题,让我们分析一下:

  1. 一个程序必须有一个唯一的入口点,它必须被声明为静态void,这里有两个main但它们是错误的

  2. 你在静态Main中矩形类中的那个你不能引用变量长度e宽度因为它们没有被声明为静态

  3. console.Read()返回一个表示字符的int,因此如果用户输入1,则长度变量中可能有不同的值
  4. 你的静态双主不会返回双
  5. 我认为你想要的是:

    1. 将静态double Main声明为void Main()
    2. 将您的void Main声明为static void Main(string [] args)
    3. 在你的新静态无效主调用中(创建矩形之后)它是Main方法(要做到这一点,你必须将其定义为公共)
    4. 使用ReadLine而不是Read()
    5. ReadLine返回一个字符串,以便在double中转换,你必须使用lenght = double.Parse(Console.ReadLine())
    6. 最后调用你的r.display()
    7. 这是一个可以满足您需求的工作代码。 在复制粘贴之前请注意,因为您正在尝试并学习阅读步骤并尝试修复它而不查看代码

      class Rectangle
      {
          double length;
          double width;
          double a;
          public void GetValues()
          {
              length = double.Parse(Console.ReadLine());
              width = double.Parse(Console.ReadLine());
          }
          public void Acceptdetails()
          {
      
          }
          public double GetArea()
          {
              return length * width;
          }
          public void Display()
          {
              Console.WriteLine("Length: {0}", length);
              Console.WriteLine("Width: {0}", width);
              Console.WriteLine("Area: {0}", GetArea());
          }
      
      }
      class ExecuteRectangle
      {
          public static void Main(string[] args)
          {
      
              Rectangle r = new Rectangle();
              r.GetValues();
              r.Display();
              Console.ReadLine();
          }
      }
      

答案 1 :(得分:0)

在这种情况下,你必须告诉编译,这是具有入口点的类。

“如果您的编译包含多个带有Main方法的类型,您可以指定哪个类型包含您要用作程序入口点的Main方法。”

http://msdn.microsoft.com/en-us/library/x3eht538.aspx

是的,有两个主要方法是混乱和无意义。