返回变量在上下文C#中不存在

时间:2014-12-25 03:10:12

标签: c# variables recursion return

如果这是一个基本问题,请道歉,对这类事情不熟悉 我有以下代码,在方法Kep中我需要以递归方式计算50次内部操作然后在50次迭代之后返回值并打印它。 当我尝试运行它时,它表示变量在上下文中不存在。 任何建议都非常感谢

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

namespace Kepler
{
    class Kepler
    {
        static void Main(string[] args)
        {
            //Variables
            double M = 0; //Anomalia
            double e = 0; //Excentricidad
            double e0 = 0; //Excentricidad Corregida
            //double E1=0; 
            double E0 = 0; //


            Console.WriteLine("Ingresa M:");
            string m = Console.ReadLine();
            M = Convert.ToDouble(m);

            Console.WriteLine("Ingresa e:");
            string ee = Console.ReadLine();
            e = Convert.ToDouble(ee);

            //Calculo de e0
            e0 = e * 180 / Math.PI;

            Console.WriteLine("Ingresa E0:");
            string EE0 = Console.ReadLine();
            E0 = Convert.ToDouble(EE0);

            //calculo de las funciones trigonometricas
            double sin = Math.Sin((E0 * Math.PI / 180));
            double cos = Math.Cos((E0 * Math.PI / 180));
            int cuenta = 0;

            Console.Clear();
            double total = Kep(M, e, sin, cos, e0, E0, ref cuenta);
            Console.WriteLine("Total=" + total);
            Console.ReadLine();
        }

        static double Kep(double M, double e, double sin, double cos, double e0, double E0, ref int cuenta)
        {
            double E1 = 0;
            for (cuenta = 0; cuenta <= 50; cuenta++)
            {
                E1 = E0 + ((M + e0 * sin - E0) / (1 - e * cos));
                Console.WriteLine("E1 hasta ahora" + E1);
            }
            return Kep(M, e, sin, cos, e0, E1, ref cuenta);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

double E1循环之前声明变量for,然后在循环内分配它。确保初始化变量以保持编译器满意。无关紧要,因为它将在第一次迭代中被覆盖。

另外,请注意,for循环执行51次,而不是50次。如果您希望执行50次,请将for循环中的<=更改为<

另外,正如Lior Raz指出的那样(好的捕获),你需要在Kep函数中添加一个停止条件,因为递归调用将永远持续,最终导致堆栈溢出。

答案 1 :(得分:0)

将变量E1移到循环外部,即将其放在循环之前

问题是它与return语句不在同一个上下文中,它不知道它存在

// initialize E1 in the case cuenta is greater than or equal to 50
double E1 = 0;
for (cuenta=0; cuenta <= 50; cuenta++)
    {
        E1 = E0 + ((M + e0 * sin - E0) / (1 - e * cos));
        Console.WriteLine("E1 hasta ahora" + E1);
    }