2011-11-27 43 views
1

的問題是:在C#中的嘗試catch塊的疑問#

應用程序應詢問用戶要預訂的總票數。如果預訂機票的總數超過可用機票,則預訂機票時,申請應引發例外。我不知道爲什麼它沒有顯示錯誤當我這樣做,我想出了這個解決方案:

using System;  
namespace Ticket 
{ 
    class blah 
    { 
     public void abc() 
     {  
      int numberOfTickets; 
      int numberOfAvailableTickets=10; 
      int cost = 100; 
      int pay; 
      Console.WriteLine("how many tickets do you need"); 
      numberOfTickets = Convert.ToInt32(Console.ReadLine()); 

      try 
      { 
       if (numberOfTickets < numberOfAvailableTickets) 
       { 
        pay = 100 * numberOfTickets; 
        Console.WriteLine("Pay please"); 
        Console.WriteLine(pay); 
       }     
      }     
      if(numberOfTickets>numberOfAvailableTickets) 
      {     
        catch (Exception e) 
        { 
         Console.WriteLine(e.Message); 
        } 
      } 
     } 
    } 

} 

class Theater 
{ 
     static void Main(string[] args) 
     { 
      blah hi = new blah(); 
      hi.abc(); 
      Console.ReadLine();  
     } 
    } 
} 
+1

*「如果預訂機票總數超過可用機票,應用程序應該引發異常」* - 不,絕對不應該。在出乎意料的情況下引發異常,而不是因爲某些數字遇到了自然邊界。 – Tomalak

+2

@Tomalak你是對的,但這似乎更像是功課... – Yahia

+0

你有混合如果和嘗試趕上。該代碼沒有讀取任何含義。 –

回答

3

我甚至不知道,你展示的代碼編譯,甚至嘗試...如果輸入的數量超過可售門票這

using System; 

namespace Ticket 
{ 
    class blah 
    { 
     public void abc() 
     { 

      int numberOfTickets; 
      int numberOfAvailableTickets=10; 
      int cost = 100; 
      int pay; 
      Console.WriteLine("how many tickets do you need"); 
      numberOfTickets = Convert.ToInt32(Console.ReadLine()); 

      try 
      { 

      if(numberOfTickets>numberOfAvailableTickets) 
       throw new Exception ("Not enough Tickets available!"); 


        pay = 100 * numberOfTickets; 
        Console.WriteLine("Pay please"); 
        Console.WriteLine(pay); 

      } 
      catch (Exception e) 
        { 
         Console.WriteLine(e.Message); 
        } 
       } 
     } 
    } 

} 
    class Theater 
    { 
     static void Main(string[] args) 
     { 
      blah hi = new blah(); 
      hi.abc(); 
      Console.ReadLine(); 

     } 
    } 
} 

throw秒的Exception ...

+0

謝謝。我忘記了拋出一個對象的用法,這意味着! :(。 – tandem

2

的問題告訴你,如果預訂數量超過可數拋出異常。

所以你不需要任何trycatch在abc(我真的希望這些名字不在你的真實代碼中)。您也可以刪除if (numberOfTickets < numberOfAvailableTickets)(但保持裏面的代碼

上圖:

pay = 100 * numberOfTickets; 

拉昇:

if(numberOfTickets>numberOfAvailableTickets) 
{ 

裏面的if地說:

throw new ArgumentException("numberOfTickets is greater than numberOfAvailableTickets"); 

你可以如果需要,將ArgumentException更改爲custom exception

另請注意,如果您使用的是catch,它必須始終在嘗試後立即或另一個catch。之間不能有if。請參閱documentation

Main中,您可以捕獲該異常,或者讓它終止應用程序(從您提供的內容不清楚)。

2

你必須使用throw來引發異常:

if(numberOfTickets>numberOfAvailableTickets) 
    throw new Exception(); 
0

問題是您沒有明確拋出異常。除非你這樣做,否則編譯器認爲你的代碼沒有問題,因爲默認情況下它只會拋出實際影響程序運行狀態的異常。

雖然這是一個'快速修復',可以這麼說,只需添加一個throw new Exception();,您想要拋出異常的地方就可以工作。

但是,理想情況下,我會建議爲此創建一個自定義Exception類。但上一行應該無論如何:)

0

我建議你刪除嘗試&捕獲和簡單使用MessageBox。

if (numberOfAvaiableTickets < numberOfTickets) 
{ 
    MessageBox.Show("Number of tickets exceeded", "ErrorWindow"); 
} 
else 
{ 
    pay = 100 * numberOfTickets; 
    Console.WriteLine("Pay please"); 
    Console.WriteLine(pay); 
}