2016-10-16 3 views
0

私は現在宿題に取り掛かっており、自分の本やオンラインで答えを見つけられないという問題にぶつかっています。私は自分のコードを修正する人を探しているわけではなく、ちょうど正しい方向に指摘する必要があります。tryブロックにオブジェクトを作成する

現在、tryブロック内にオブジェクトを作成しようとしています。そのtryブロックの前に、ユーザーに4つの数字を入力するように求めています。これらの4つの数値は、tryブロック内で作成しようとしているオブジェクトのパラメータです。このデータをユーザーからtryブロックに渡す方法がわかりません。

私の質問は、tryブロック内でオブジェクトを作成するにはどうしたらいいですか?私は現在のコードがtryブロックにヒットするとすぐに0をすべてリセットすることを知っています。

static void Main(string[] args) 
    { 

     string choice; 



     //Input once choice is made---------------------------------------------- 
     do 
     { 
      Console.WriteLine("**********************************************"); 

      Console.WriteLine("Create Checking Account \"C\""); 
      Console.WriteLine("Create Checking Account \"S\""); 
      Console.WriteLine("Quit the Application \"Q\""); 

      Console.WriteLine("**********************************************"); 

      Console.Write("Enter choice: "); 
      choice = Convert.ToString(Console.ReadLine()); 

      if (choice != "Q") 
      { 

       switch (choice) 
       { 
        case "C": 


         Console.Write("Enter a name for the Account: "); 
         CA.setAccountName(Convert.ToString(Console.ReadLine())); 
         Console.Write("Enter an account Number: "); 
         CA.setAccountNumber(Convert.ToInt32(Console.ReadLine())); 
         Console.Write("Enter an initial balance: "); 
         CA.setBalance(Convert.ToDecimal(Console.ReadLine())); 
         Console.Write("Enter the fee to be charged per transcation: "); 
         CA.setFeeCharged(Convert.ToDecimal(Console.ReadLine())); 
         try 
         { 
          CheckingAccount CA = new CheckingAccount("",0,0,0); 


          CA.PrintAccount(); 
         } 

         catch (Negative ex) 
         { 
          Console.WriteLine("**********************************************"); 
          Console.WriteLine(ex.Message); 
         } 



         break; 
+2

あなたの質問が実際にはっきりしていません。すでにtryブロックの中にオブジェクトを宣言しているようです。実行している問題は何ですか? – pquest

+0

tryブロックの前にオブジェクトを作成する必要がありました。これをnullに設定しました。それから私は実際にユーザーの入力を保存したことはありません。 最後に、tryブロック内にコードが書き込まれると、ユーザー入力データを使用する代わりに、すべてを自動的にゼロにリセットします。 – bravebutters

答えて

1

宣言する前にオブジェクトを参照することはできません。参照番号CAに多くの通話があり、それが宣言され、それらの通話の下に作成される前でもあります。

tryブロックに関する質問とオブジェクトの作成:tryブロックの外側にポインタを作成し、それを `tryブロック内に割り当てます。次に、処理された例外がないと仮定してtryブロックの外側にアクセスします。

// outside of try 
CheckingAccount CA = null; 
try 
{ 
    CA = new CheckingAccount("",0,0,0); 
    /* Rest of the code unchanged*/ 
+0

ありがとうございました。私はCheckingAccount CA = Nullを試しました。それがなぜうまくいかなかったのか理解できませんでした。あなたとCrushaの間で、私は何が間違っているのか理解しています。 – bravebutters

1

CAという名前のオブジェクトのインスタンスがあります。 tryブロックの前にデータを入れます。tryブロックでは、同じ名前の新しいインスタンスを作成します。これは古いインスタンスを上書きし、データが失われます。 tryブロックに新しいインスタンスが必要なのはなぜですか?

0

イゴールの回答に加えて:代わりに、直接あなたがちょうどあなたが後でオブジェクトのコンストラクタに渡すことができるようにあなたは、最初の値を格納する必要があり、読み値を設定する

代わり

CA.setAccountName(Convert.ToString(Console.ReadLine())); 

使用

// You probably don't even need the Convert.ToString() here, 
// since the read line is already a string. 
string accountName = Convert.ToString(Console.ReadLine()); 

以降

// Do the same for the other values and replace the 0s. 
CA = new CheckingAccount(accountName,0,0,0); 
+0

ありがとうございます。私は間違ったことをしていることが分かりました。本当にシンプルでした。 – bravebutters

0

のtryブロックの外に作成された変数は、その中にまだ使用可能です。これを行うことができます:

var accountName = Console.ReadLine(); 
var accountNumber = Int.Parse(Console.ReadLine()); 
var balance = Decimal.Parse(Console.ReadLine()); 
var feeCharged = Decimal.Parse(Console.ReadLine()); 
try 
{ 
    var CA = new CheckingAccount(accountName,accountNumber,balance,feeCharged); 
    CA.PrintAccount(); 
} 
catch 
{ 
// stuff 
} 

tryブロックの後にアカウントを使用する必要がある場合は、前に宣言します。すなわち CheckingAccount CA = null; tryブロックの前のどこか。

注:ユーザー入力の処理もtryブロックに移行します。数字に変換できないものを入力するユーザーは、おそらく処理したい例外です。

関連する問題