应用程序应询问用户要预订的门票总数。如果预订门票的总数超过可用门票,则预订门票,申请应提出例外。当我这样做时,我不知道为什么它没有显示错误我想出了这个解决方案:
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();
}
}
}
答案 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();
}
}
}
答案 1 :(得分:2)
问题是如果预订的号码超过可用号码,则告诉您抛出异常。
所以你在abc中不需要任何try
或catch
(我真的希望这些名字不在你的真实代码中)。您也可以删除if (numberOfTickets < numberOfAvailableTickets)
(但保留代码。
以上:
pay = 100 * numberOfTickets;
向上移动:
if( numberOfTickets>numberOfAvailableTickets)
{
在if
put:
throw new ArgumentException("numberOfTickets is greater than numberOfAvailableTickets");
如果需要,您可以将ArgumentException更改为custom exception
另请注意,如果您使用的是catch
,则必须在尝试后立即使用catch
。您之间不能有if
。请参阅documentation。
在Main
中,您可以捕获该异常,也可以让它终止该应用程序(不清楚您提供的内容)。
答案 2 :(得分:2)
您必须使用throw来引发异常:
if( numberOfTickets>numberOfAvailableTickets)
throw new Exception();
答案 3 :(得分:0)
问题是您没有显式抛出异常。除非你这样做,否则编译器会发现代码没有任何问题,因为默认情况下它只会抛出实际影响程序运行状态的异常。
虽然这是一个“快速修复”,但是,只需添加一个throw new Exception();
,您希望抛出异常就可以了。
但是,理想情况下,我建议为此目的创建自定义Exception类。但前一行应该可行:)
答案 4 :(得分:0)
我建议你删除试用版&amp;捕获并简单使用MessageBox。
if (numberOfAvaiableTickets < numberOfTickets)
{
MessageBox.Show("Number of tickets exceeded", "ErrorWindow");
}
else
{
pay = 100 * numberOfTickets;
Console.WriteLine("Pay please");
Console.WriteLine(pay);
}