2016-10-16 94 views
0

我目前正在完成一項家庭作業任務,並遇到了一個問題,我無法在我的書籍或在線中找出答案。我不想找人來修復我的代碼,我只需要指出正確的方向。在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塊。用戶輸入的東西無法轉換爲數字是您可能想要處理的異常。