2014-02-23 46 views
4
using System; 

public class Newton_Ralphson 
{ 
    public double compute(double x,int n,double[] P)   // x, degree, coefficients 
    { 
     double pol = 0; 
     for (int i = 0;i < n;i++) 
     { 
      for (int j = 1; j < n - i; j++) 
       x *= x; 
       pol += P[n - i] * x; 
     } 
     pol += P[0]; 
     return pol; 
    } 

public double[] secondary_Pol(int n, double[] P)   //slope 
{ 
    double[] secP = new double[n - 1]; 
    for (int i = 0; i < n - 1; i++) 
     secP[i] = P[i + 1]; 
    return secP; 
} 

public double Main() 
{ 
    Console.WriteLine("Estimate the solution for a nth degree polynomial!!! "); 
    int n = 0; 
    Console.WriteLine("Enter the degree of the polynomials! "); 
    n = Int32.Parse(Console.ReadLine()); 
    double[] coefficients = new double[n+1]; 

    for(int i = 0;i < n+1;i++) 
    { 
     Console.WriteLine("Enter the coefficients "); 
     Console.Write("coefficients of x to the power of {0}: ", n - i);   //decending coefficients 
     coefficients[n-i] = Convert.ToDouble(Console.ReadLine()); 
    } 


    Console.WriteLine("Initial value is: "); 
    double xint = Convert.ToDouble(Console.ReadLine()); 

    Console.WriteLine("How many times does the function go through? "); 
    int precision = Convert.ToInt32(Console.ReadLine()); 
    double polyValue = 0; 

    for (int j = 0; j < precision; j++) 
    { 
     polyValue = compute(xint, n, coefficients);        //y0 in y = slope(x-x0) + y0 
     double slope = compute(xint, n - 1, secondary_Pol(n, coefficients)); 
     xint = (-polyValue/slope) + xint; 
    } 
    Console.WriteLine(xint); 
    Console.ReadLine(); 
    return 0; 
} 

}CS5001:EXE不包含適合的入口點

當添加「靜態」進線靜態「主」方法:public static雙主() 還有另一個錯誤顯示向上

錯誤CS0120:一個對象引用是所必需的非靜態字段,方法或屬性「Newton_Ralphson.compute(雙,整型,雙[])」的兩個另外的功能被執行時發生

錯誤

+1

我認爲'Main'必須是'void'。此外,請檢查您的項目的屬性,並取消選中'啓用應用程序框架' –

+2

@ T.S。 - 不,'Main'可以返回'int'或'void'。例如,請參閱此[MSDN](http://msdn.microsoft.com/zh-cn/library/ms228506%28v=vs.90%29.aspx)鏈接。 – Tim

+0

1)*將* static *添加到Main 2)修復*那些*錯誤(在SO上搜索導致它們的原因以及如何修復它們)3)返回並修復關於Main的下一個錯誤 - 總是試着拿一個向前一步。你最終會走到最後。 – user2864740

回答

4

請參閱C# entry point function

C#應用程序,Main()方法必須是切入點。

的原因是因爲這是語言 的設計者決定要尋找什麼作爲切入點,爲你的程序。 他們也可以使用完全不同的方法來找到入口點,例如 。使用元數據或實例化一個對象(您需要一個無參數的構造函數) 。 另一個命名爲void main()的原因是它對於來自 其他語言的用戶來說很直觀。

用途:

public class Newton_Ralphson 
{ 
    public static double compute(double x, int n, double[] P) // x, degree, coefficients 
    { 
     double pol = 0; 
     for (int i = 0; i < n; i++) 
     { 
      for (int j = 1; j < n - i; j++) 
       x *= x; 
      pol += P[n - i]*x; 
     } 
     pol += P[0]; 
     return pol; 
    } 

    public static double[] secondary_Pol(int n, double[] P) //slope 
    { 
     double[] secP = new double[n - 1]; 
     for (int i = 0; i < n - 1; i++) 
      secP[i] = P[i + 1]; 
     return secP; 
    } 

    public static void Main() 
    { 
     Console.WriteLine("Estimate the solution for a nth degree polynomial!!! "); 
     int n = 0; 
     Console.WriteLine("Enter the degree of the polynomials! "); 
     n = Int32.Parse(Console.ReadLine()); 
     double[] coefficients = new double[n + 1]; 

     for (int i = 0; i < n + 1; i++) 
     { 
      Console.WriteLine("Enter the coefficients "); 
      Console.Write("coefficients of x to the power of {0}: ", n - i); //decending coefficients 
      coefficients[n - i] = Convert.ToDouble(Console.ReadLine()); 
     } 


     Console.WriteLine("Initial value is: "); 
     double xint = Convert.ToDouble(Console.ReadLine()); 

     Console.WriteLine("How many times does the function go through? "); 
     int precision = Convert.ToInt32(Console.ReadLine()); 
     double polyValue = 0; 

     for (int j = 0; j < precision; j++) 
     { 
      polyValue = compute(xint, n, coefficients); //y0 in y = slope(x-x0) + y0 
      double slope = compute(xint, n - 1, secondary_Pol(n, coefficients)); 
      xint = (-polyValue/slope) + xint; 
     } 
     Console.WriteLine(xint); 
     Console.ReadLine(); 

    } 
} 

1 - 更改public double Main()public static void Main()

2變public double[] secondary_Pol(int n, double[] P)public static double[] secondary_Pol(int n, double[] P)

3-變化public double compute(double x,int n,double[] P)至public static double compute(double x, int n, double[] P)

+0

+ +1對於正確答案和關於使'secondary_Pol'和'compute'方法爲'static'的額外英里點 - 即減輕將會出現的下一個問題! :) – J0e3gan

3

創建一個新的在Visual Studio C#控制檯應用程序會告訴你,你一般需要:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) // static with a void (or int) return type 
     { 
     } 
    } 
} 

Main必須聲明static

double Main絕對是一個問題。請參閱what a C# main method needs上的舊版MSDN文章 - 具體爲voidint返回類型。

Mainstring[] PARAM爲ARGS是可選的 - 即可以省略。請參閱上述MSDN文章以進行確認。

最後,加入publicMain的聲明是好的,但不必要的,並且典型地跳過。

3

將靜態添加到所有方法。您無法從靜態方法調用非靜態方法,而無需提供對象引用。作爲替代方案,您可以創建一個類的實例並調用該方法:

var c = new Newton_Ralphson(); 
c.compute(); 
+0

+1用於緩解固定'Main'聲明後會出現的下一個問題 - 即注意到其他方法也需要聲明爲'static'。但是,從'Main'返回'double'是一個問題。基本上,如果你和我結合的答案,我們會在@ ShahroozJefri的。 :} – J0e3gan

相關問題