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

本文关键字:不存在 上下文 变量 返回 | 更新日期: 2023-09-27 18:35:11

道歉,如果这是一个基本问题,我是这种东西的新手我有以下代码,在方法 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);
        }
    }
}

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

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

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

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

将变量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);
    }