C# 从上一次递归迭代中读取旧值的递归函数
此代码段从控制台读取输入并返回一个对象。 如果有任何错误,它会再次调用自己 我有验证规则来检查输入值是否不是字母。我的验证器将返回该错误并再次调用该函数以获取正确的输入 以下代码的问题在于:C# 从上一次递归迭代中读取旧值的递归函数,c#,recursion,C#,Recursion,此代码段从控制台读取输入并返回一个对象。 如果有任何错误,它会再次调用自己 我有验证规则来检查输入值是否不是字母。我的验证器将返回该错误并再次调用该函数以获取正确的输入 以下代码的问题在于: 当我输入错误时,让我们说“abc” 验证程序返回错误并在控制台上打印出来,并请求 新输入 现在,当我提交正确的输入时,比如说12,它抛出一个 分析字符数组时发生FormatException。行: Int32.Parse(positionXY[0].ToString()) 我怎样才能修好它 public
- 当我输入错误时,让我们说“abc”
- 验证程序返回错误并在控制台上打印出来,并请求 新输入
- 现在,当我提交正确的输入时,比如说12,它抛出一个
分析字符数组时发生FormatException。行:
Int32.Parse(positionXY[0].ToString())
public MissileCoordinates ReadCoordinates()
{
PrintLine($"Enter Coordinates", ConsoleColor.White);
var move = Console.ReadLine();
List<string> errors = constraintValidator.ValidateMissile(move).ToList();
if (errors.Any())
{
foreach (var error in errors)
{
PrintLine(error, ConsoleColor.White);
}
ReadCoordinates();
}
else
{
var positionXY = move.ToCharArray();
return new MissileCoordinates
{
PosX = Int32.Parse(positionXY[0].ToString()),
PosY = Int32.Parse(positionXY[1].ToString())
};
}
return null;
}
public missioncoordinates ReadCoordinates()
{
打印行($“输入坐标”,ConsoleColor.White);
var move=Console.ReadLine();
List errors=constraintValidator.ValidateMissile(move.ToList();
if(errors.Any())
{
foreach(错误中的var错误)
{
打印行(错误,ConsoleColor.White);
}
ReadCoordinates();
}
其他的
{
var positionXY=move.ToCharArray();
返回新的任务协调
{
PosX=Int32.Parse(positionXY[0].ToString()),
PosY=Int32.Parse(positionXY[1].ToString())
};
}
返回null;
}
您的递归函数应该是:
public MissileCoordinates ReadCoordinates()
{
PrintLine($"Enter Coordinates", ConsoleColor.White);
var move = Console.ReadLine();
List<string> errors = constraintValidator.ValidateMissile(move).ToList();
if (errors.Any())
{
foreach (var error in errors)
{
PrintLine(error, ConsoleColor.White);
}
return ReadCoordinates();
}
else
{
var positionXY = move.ToCharArray();
return new MissileCoordinates
{
PosX = Int32.Parse(positionXY[0].ToString()),
PosY = Int32.Parse(positionXY[1].ToString())
};
}
}
public missioncoordinates ReadCoordinates()
{
打印行($“输入坐标”,ConsoleColor.White);
var move=Console.ReadLine();
List errors=constraintValidator.ValidateMissile(move.ToList();
if(errors.Any())
{
foreach(错误中的var错误)
{
打印行(错误,ConsoleColor.White);
}
返回ReadCoordinates();
}
其他的
{
var positionXY=move.ToCharArray();
返回新的任务协调
{
PosX=Int32.Parse(positionXY[0].ToString()),
PosY=Int32.Parse(positionXY[1].ToString())
};
}
}
这里是fiddle我用你的代码创建了一个fiddle,它运行得很好。你能发布完整的代码吗?你试图给出的输入示例这个方法首先是一个不适合递归的候选者。使用
do
或while
循环读取输入会更合适。我同意@jmcilhinneydamn返回关键字:D