Сомнения в попытке поймать блок в C # - PullRequest
1 голос
/ 27 ноября 2011

вопрос был:

Приложение должно запросить у пользователя общее количество билетов, которые необходимо забронировать. в то время как при бронировании билетов общее количество забронированных билетов превышает доступные билеты, в заявке должно быть сделано исключение. Я не знаю, почему это не показывает ошибку, когда я делаю это, я придумал это решение:

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();    
        }
  }
}

Ответы [ 5 ]

3 голосов
/ 27 ноября 2011

Я даже не уверен, что код, который вы показываете, даже компилируется ... попробуйте это

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 s Exceptionесли введенный номер превышает доступные билеты ...

2 голосов
/ 27 ноября 2011

Вы должны использовать throw , чтобы вызвать исключение:

if( numberOfTickets>numberOfAvailableTickets)
     throw new Exception();
2 голосов
/ 27 ноября 2011

Вопрос состоит в том, чтобы вы вызывали исключение, если забронированный номер превышает доступное число.

Так что вам не нужно вводить try или catch в abc (я действительно надеюсь, что эти имена нене в вашем реальном коде).Вы также можете удалить if (numberOfTickets < numberOfAvailableTickets) (но сохранить код внутри.

Вверху:

pay = 100 * numberOfTickets;

двигаться вверх:

if( numberOfTickets>numberOfAvailableTickets)
{

Внутри if пут:

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

Вы можете изменить ArgumentException на пользовательское исключение при желании

Также обратите внимание, что если вы используете catch, оно всегда должно быть сразу послепопытка или другое catch. Вы не можете иметь if. См. документацию .

В Main вы можете либо поймать это исключение, либо позволить емузавершить работу приложения (непонятно из того, что вы указали).

0 голосов
/ 27 ноября 2011

Я бы предложил вам удалить пробную версию и простое использование MessageBox.

if (numberOfAvaiableTickets < numberOfTickets)
{
    MessageBox.Show("Number of tickets exceeded", "ErrorWindow");
}
else
{
     pay = 100 * numberOfTickets;
     Console.WriteLine("Pay please");
     Console.WriteLine(pay);
}
0 голосов
/ 27 ноября 2011

Проблема в том, что вы явно не выбросили исключение. Если вы этого не сделаете, компилятор не увидит ничего плохого в вашем коде, поскольку по умолчанию он будет генерировать только исключения, которые фактически влияют на состояние выполнения вашей программы.

Хотя это, так сказать, «быстрое исправление», просто добавьте throw new Exception();, где вы хотите, чтобы было сгенерировано исключение.

Однако в идеале я бы порекомендовал создать для этого специальный класс Exception. Но предыдущая строка должна работать в любом случае:)

...