代码不会返回值?

时间:2014-09-27 16:21:49

标签: c#

(我是编程和本网站的初学者。提前:如果我以错误的方式使用本网站时出错,我会道歉。)

我试图将以下代码用于mandelbrot程序。我需要程序返回' n'但是当我调试时,我收到一条错误消息,说该程序没有合适的静态主方法:

  

错误1程序&c; \ Users \ Alain \ Documents \ Visual Studio   2013 \项目\曼德尔布罗\ PROJECT1 \ PROJECT1 \ OBJ \调试\ PROJECT1.EXE'   不包含静态' Main'适合入境的方法   点C:\ Users \ Alain \ Documents \ Visual Studio   2013 \ Projects \ Mandelbrot \ Project1 \ Project1 \ CSC Project1

虽然我可以清楚地看到有一个'主要'代码中的方法。 有谁知道问题可能是什么?

我的代码(C#):

using System;

namespace WindowsFormsApplication1
{
    public class formule
    {
        public static int main()
        {
            double f = new double();
            double x = new double();
            double y = new double();
            double a = new double();
            double b = new double();
            int n = new int();
            double max = new double();
            double schaal = new double();
            double afstand = new double();

            x = 0.5;
            y = 0.8;
            n = 0;
            a = 0;
            b = 0;
            // max = invoer 3
            //schaal = invoer 4
            afstand = 0;

            while (afstand <= 2) 
            {
                a = (a * a - b * b + x);
                b = (2 * a * b + y);
                afstand = Math.Sqrt((x * x) + (y * y));

                n++;
            }

            return n;
        }
    } 
}

3 个答案:

答案 0 :(得分:3)

您的问题是main()需要Main()。错误消息(您稍后才添加到问题中)非常明确 - 当编译器给您一个错误或警告时,它是有原因的,您应该仔细阅读。

由于我已将此作为评论添加到另一个答案中,因此您可以在C#程序中声明Main()http://msdn.microsoft.com/en-us/library/acy3edy3.aspx如果您按照该顶级文章中的链接进行操作,则可以找到编译器将接受的各种替代Main声明。

作为对您的代码的评论(与问题没有严格关联):您不需要编写double f = new double();然后单独分配值(尽管可以)。你可以写:

double f = 0;

doubleint是值类型,声明值类型会隐式创建实例。在读取它们之前,您仍然需要为它们分配某种值(否则编译器会抱怨尝试使用未初始化的变量)。

答案 1 :(得分:0)

C#程序主要入口点的签名必须是:

static void Main(string[] args)
{
}

检查:http://msdn.microsoft.com/en-us/library/acy3edy3.aspx

  • Main在类或结构中声明。 Main必须是静态的,不应该是公开的。 (在前面的示例中,它接收private的默认访问权。)封闭的类或结构不需要是静态的。
  • Main可以有void或int返回类型。
  • 可以使用或不使用包含命令行参数的string []参数声明Main方法。使用Visual Studio创建Windows窗体应用程序时,可以手动添加参数,也可以使用Environment类获取命令行参数。参数被读作零索引命令行参数。与C和C ++不同,程序的名称不被视为第一个命令行参数。

答案 2 :(得分:0)

C#区分大小写,因此您必须始终注意大小写。

Mainmain是两种不同的方法。

C#需要Main()作为其切入点。 main()只是另一种方法。

顺便说一下,这是C#编译器的选择,而不是.NET。低级汇编代码使用.entrypoint指令定义它。

 .method public static void Main() cil managed {
   .entrypoint

如果您使用MSIL编写自己的.NET程序集,则可以决定使用main或foo作为&#34; main&#34;程序

另一个有趣的警告,您实际上可以返回Main()中使用的值。观看Main()调用本身。现在我不推荐这个,但它演示Main只是另一个函数,虽然被注册为模块的入口点。

  static int Main(string[] args)
  {
        if (args.Length == 0)
        {
              args = new[] {"foo"};
              Main(args); // recursively call Main()
              Console.WriteLine("2nd Main executed");
              return -1; // Parent main returns
        }

        // Child Main() finishes the work
        Console.WriteLine("Main finished");

        return 0;
  }