我正在尝试验证 ID。
我ManejadorTickets
在其中调用了这个类-除其他外-我调用了验证ID的方法(ID是Cedula,类似于美国的SSN)。
public void venderTicket ()
{
// more code...
Console.Write("\nCedula: ");
string cedula = Validador.validarCedula(Console.ReadLine().Trim());
// more code...
}
这是我validarCedula
在Validador
课堂上的方法。
public static String validarCedula (string cedula)
{
// Limpiar la entrada de caracteres extraños
cedula = cedula.Replace("-", "");
cedula = cedula.Replace(" ", "");
// Debe tener 11 caracteres
if (cedula.Length != 11)
{
Impresor.imprimirOpExitosa(cedula.Length.ToString());
Impresor.imprimirError("La cedula debe tener 11 digitos", "Cedula: ");
validarCedula(Console.ReadLine().Trim());
}
// Todos los caracteres deben ser numeros
char[] arrayLetras = cedula.ToCharArray();
foreach (char c in arrayLetras)
{
if (NUMEROS.IndexOf(c) == -1)
{
Impresor.imprimirError("Todos los caracteres deben ser numericos." +
" Los guiones o espacios no se toman en cuenta.", "Cedula: ");
validarCedula(Console.ReadLine().Trim());
}
}
return cedula;
}
上述方法消除了输入中的连字符和空格。还要检查输入是否正好有 11 个字符以及所有字符是否都是数字。
注意:NUMBERS 是我在课程开始时声明的常量
private const string NUMEROS = "0123456789";
但是当我运行程序时,输入一个错误的值作为Cedula
(测试我的验证方法),例如“foo”,它会发生应该发生的事情(再次询问该值)。到目前为止一切顺利,现在当我输入正确的值,例如 00114905656(所有数字和 11 位数字)时,它再次要求输入一个值,这不应该发生,因为最后输入的值是正确的。
我尝试调试我的应用程序,我看到该方法按应有的方式执行,但是当编译器执行语句return cedula;
(方法中的最后一句)时,它会跳转到 validarCedula(Console.ReadLine().Trim());
语句中的第一个if (cedula.Length != 11)
语句。我不明白为什么会这样。当return
执行该方法时,该方法应该完成。