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