2017-08-06 8 views
-2

TryParseメソッドをC#で使用しようとしています。 私はユーザーからの入力を受け取り、整数の場合は変数に戻るプログラムを作成しています。プログラムは入力が有効な整数であればうまく動作しますが、12sdのような無効な数値を入力するとa=0を返します。間違いはどこですか。少なくとも1回無効な整数を入力した後にa = 0の値を返す

プログラムは、クラスであるとして、コンソールアプリケーションを考えてみましょう

Program obj = new Program(); 
int a = obj.checkValidNumber(); 

を使用して、メインで呼び出し

public int checkValidNumber() 
{ 
    Program obj = new Program(); 
    int a = 0; 
    string str = Console.ReadLine(); 
    if(!int.TryParse(str, out a)) 
    { 
     Console.WriteLine("Please enter a valid number"); 
     obj.checkValidNumber(); 
    } 
    return a; 
} 

ください

答えて

2

あなたはとobj.checkValidNumber();を交換する必要があります。また

a = obj.checkValidNumber(); 
//Or 
return obj.checkValidNumber(); 

checkValidNumberのメンバー関数です使用している場合

public int checkValidNumber() 
{ 
    int a=0; 
    while(!int.TryParse(Console.ReadLine(), out a)) 
    { 
     Console.WriteLine("Please enter a valid number"); 
    } 
    return a; 
} 

:10、むしろ再帰呼び出しよりも、このためにwhileループを使用するように各呼び出しで

public int checkValidNumber() 
{ 
    int a=0; 
    if(!int.TryParse(Console.ReadLine(), out a)) 
    { 
     Console.WriteLine("Please enter a valid number"); 
     return checkValidNumber(); 
    } 
    return a; 
} 

しかし、おそらくより良いをProgramの新しいインスタンスを作成する理由はありませんC#7.0は、TryParsenew usage of an out variableを参照してください。

+0

ありがとうございます。方法でオブジェクトを使わないようにして、whileループを使うと助けになりました。 –

+0

@Arunkumar - 喜んでそれを助けました:)それはあなたが使用している場合は、C#7.0を参照してください –

関連する問題