返回变量在上下文 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);
}
}
}
在 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);
}