Alıştırma - C# konsol uygulamasında özel durumları oluşturma ve yakalama
Bu alıştırmada, üst düzey deyimlerde bir try kod bloğu ve catch yan tümcesi geliştirecek, yönteminde MakeChange özel durumlar oluşturup oluşturacak ve ardından bir özel durum nesnesi kullanarak kod bloğunu catch tamamlayacaksınız. Bu alıştırma sırasında aşağıdaki görevleri tamamlarsınız:
- Üst düzey deyimleri güncelleştirme: Üst düzey deyimlerde bir
try-catchdesen uygulayın. Kodtrybloğu çağrısıMakeChangeiçerir. - Güncelleştirme
MakeChangeyöntemi: "Süre yetersiz" ve "Yetersiz ödeme" sorunları için özel durumlar oluşturun ve oluşturun. - Kod bloğunu
catch, oluşan özel durumun özelliklerini kullanacak şekilde güncelleştirin. - Doğrulama testi: Bu alıştırmada geliştirdiğiniz kod için doğrulama testleri gerçekleştirin.
Üst düzey deyimlere desen try-catch ekleme
Bu görevde, çağrıyı yöntemine bir MakeChange deyiminin try içine alır ve karşılık gelen catch yan tümcesini oluşturursunuz.
Program.cs dosyasının Visual Studio Code Düzenleyicisi'nde açık olduğundan emin olun.
Aşağıdaki kod satırlarını bulun:
// MakeChange manages the transaction and updates the till string transactionMessage = MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes); // Backup Calculation - each transaction adds current "itemCost" to the till if (transactionMessage == "transaction succeeded") { Console.WriteLine($"Transaction successfully completed."); registerCheckTillTotal += itemCost; } else { Console.WriteLine($"Transaction unsuccessful: {transactionMessage}"); }Bu kodun amacını göz önünde bulundurmak için bir dakika bekleyin.
Bir dize değeri döndürdüğüne
MakeChangedikkat edin. Dönüş değeri adlıtransactionMessagebir değişkene atanır. "İşlem başarılı" değerine eşitsetransactionMessage, satın alınan öğenin maliyeti öğesineregisterCheckTillTotaleklenir. değişkeniregisterCheckTillTotal, yöntemi tarafından hesaplanan till bakiyesiniMakeChangedoğrulamak için kullanılır.yöntemine yapılan çağrıyı
MakeChangebirtrydeyim kodu bloğuna almak için kodunuzu aşağıdaki gibi güncelleştirin:try { // MakeChange manages the transaction and updates the till string transactionMessage = MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes); }Deyim kodu bloğundan sonra aşağıdaki
catchyan tümceyitryekleyin:catch { }Özel durumları oluşturup oluşturduktan sonra yan tümcesini geliştirmeyi
catchtamamlayacaksınız.
yönteminde MakeChange özel durumlar oluşturma ve oluşturma
Bu görevde, bir işlem tamamlanamazken özel özel durumlar oluşturacak ve oluşturacak şekilde güncelleştireceksiniz MakeChange .
yöntemi, MakeChange özel durumlara neden olması gereken iki sorun içerir:
Yetersiz ödeme sorunu: Bu sorun, müşteri madde maliyetinden daha düşük bir ödeme sunduğunda oluşur. Müşteri yeterli ödeme önermediyse bir
MakeChangeözel durum oluşturmalıdır.Kasa yetersizliği sorunu: Bu sorun, kasa tam değişikliği sağlayacak gerekli banknotları içermediğinde oluşur. Eğer till tam olarak değişiklik yapamazsa,
MakeChangeoluşturmalı ve özel durum oluşturmalıdır.
Ekranı aşağı kaydırarak
MakeChangeyöntemine gelin.Aşağıdaki kod satırlarını bulun:
if (changeNeeded < 0) transactionMessage = "Not enough money provided.";Bu kodun ele alma sorununu göz önünde bulundurmak için bir dakika bekleyin.
Sıfırdan küçükse
changeNeeded, müşteri satın aldığı ürünün satın alma fiyatını karşılamak için yeterli para sağlamamıştır. Satın alma fiyatı ve müşteri tarafından sağlanan para yönteminMakeChangeparametreleridir. Müşteri yeterli para sağlamadığında yöntemi işlemi tamamlayamıyor. Başka bir deyişle işlem başarısız olur.Bu koşullara uyan iki özel durum türü vardır:
-
InvalidOperationException: ÖzelInvalidOperationExceptiondurum, yalnızca bir yöntemin çalışma koşulları belirli bir yöntem çağrısının başarıyla tamamlanmasını desteklemediğinde oluşturulmalıdır. Bu durumda, çalışma koşulları yöntemine sağlanan parametrelerle oluşturulur. -
ArgumentOutOfRangeException- ÖzelArgumentOutOfRangeExceptiondurum, yalnızca bir bağımsız değişkenin değeri çağrılan yöntem tarafından tanımlanan izin verilebilen değer aralığının dışında olduğunda oluşturulmalıdır. Bu durumda, sağlanan para öğenin maliyetinden daha büyük olmalıdır.
Her iki özel durum türü de çalışabilir, ancak
InvalidOperationExceptionbu uygulama bağlamında biraz daha iyi bir eşleşmedir.-
Kodu aşağıdaki gibi güncelleştirin:
if (changeNeeded < 0) throw new InvalidOperationException("InvalidOperationException: Not enough money provided to complete the transaction.");Aşağıdaki kod satırlarını bulmak için aşağı kaydırın:
if (changeNeeded > 0) transactionMessage = "Can't make change. Do you have anything smaller?";Bu kodun ele alma sorununu göz önünde bulundurmak için bir dakika bekleyin.
Değişikliği hazırlayan döngülerden sonra
changeNeededsıfırdan büyüksewhile, till'de değişiklik yapmak için kullanılabilecek faturalar tükenmiştir. Yöntemi, till değişiklik yapmak için gereken faturalar eksik olduğunda işlemi tamamlayamaz. Başka bir deyişle işlem başarısız olur.Özel
InvalidOperationExceptiondurum, özel durum oluşturmak için kullanılmalıdır.Kodu aşağıdaki gibi güncelleştirin:
if (changeNeeded > 0) throw new InvalidOperationException("InvalidOperationException: The till is unable to make the correct change.");
Kod bloğunu catch tamamlama
Bu görevde, belirli bir özel durum türünü yakalamak için yan tümcesini catch güncelleştireceksiniz.
Yönteminin yukarısını
MakeChangekaydırın ve aşağıdaki kodu bulun:catch { }yönteminde
MakeChangeoluşturulan özel durum türünü yakalamak için kodu aşağıdaki gibi güncelleştirin:catch (InvalidOperationException e) { Console.WriteLine($"Could not complete transaction: {e.Message}"); }içinde
InvalidOperationExceptionoluşanMakeChangeözel durum nesnesi yakalanacak, ancak diğer özel durum türleri yakalanmayacak. Diğer özel durum türlerini işlemeye hazır olmadığınıza göre, bunların çağrı yığınında daha düşük bir şekilde yakalanmalarına izin vermek önemlidir. içindeMakeChangediğer özel durum türlerinin beklendiğini fark ederseniz, ekcatchyan tümceler ekleyebilirsiniz.Güncelleştirmelerinizi kaydetmek için Dosya menüsünü kullanın.
MakeChange yöntemini "string" yerine "void" biçimine dönüştürün ve özel durum özelliklerine erişin
Bu görevde, türünde MakeChangeolacak şekilde güncelleştirecek void ve ardından sorun ayrıntılarını kullanıcıya iletmek için özel durum özelliklerini kullanacaksınız.
Yönteminin en üstüne
MakeChangekaydırın.yöntemini türünden
MakeChangetürünestringvoiddönüştürmek için kodu aşağıdaki gibi güncelleştirin:static void MakeChange(int cost, int[] cashTill, int twenties, int tens = 0, int fives = 0, int ones = 0)Aşağıdaki değişken bildirimini silin:
string transactionMessage = "";Yönteminin en altına
MakeChangekaydırın.Aşağıdaki kod satırlarını silin:
if (transactionMessage == "") transactionMessage = "transaction succeeded"; return transactionMessage;Yukarı kaydırarak en üst düzey deyimlere gelin ve kod bloğunu
trybulun.Kod bloğunu
tryaşağıdaki gibi güncelleştirin:try { // MakeChange manages the transaction and updates the till MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes); Console.WriteLine($"Transaction successfully completed."); registerCheckTillTotal += itemCost; }Aşağıdaki kod satırlarını bulun ve silin:
// Backup Calculation - each transaction adds current "itemCost" to the till if (transactionMessage == "transaction succeeded") { Console.WriteLine($"Transaction successfully completed."); registerCheckTillTotal += itemCost; } else { Console.WriteLine($"Transaction unsuccessful: {transactionMessage}"); }tryvecatchkod blokları artık işlem "başarılı" ve "başarısız" iletilerini kullanıcıya iletiyor. Özel durumunMessageözelliği sorunu açıkladığından, tekConsole.WriteLine()bir deyim her iki sorunu da giderir. Bu güncelleştirmelerden sonra kodunuzu okumak ve korumak daha kolaydır.Güncelleştirmelerinizi kaydetmek için Dosya menüsünü kullanın.
Çalışmanızı denetleyin
Bu görevde uygulamanızı çalıştıracak ve güncelleştirilmiş kodunuzun amaçlandığı gibi çalıştığını doğrulayacaksınız.
Üst düzey deyimlerde döngü bulmak
whileiçin yukarı kaydırın.Bu döngü, işlemler arasında yineleme yapmak için kullanılır.
Döngü başlamadan
whilebirkaç satır önce aşağıdaki kodu bulun.int transactions = 10;İşlem
40sayısını şu şekilde güncelleştirin:int transactions = 40;Döngünün içinde
whileaşağıdaki kod satırını bulun.int itemCost = valueGenerator.Next(2, 20);Rastgele sayı oluşturucuyu
itemCostaşağıdaki gibi güncelleştirin:int itemCost = valueGenerator.Next(2, 50);Bu maliyet aralığı, müşterilerin satın alacakları ürünler için daha iyi bir eşleşmedir.
Güncelleştirmelerinizi kaydetmek için Dosya menüsünü kullanın.
Çalıştır menüsünde Hata Ayıklamayı Başlat seçin.
TERMINAL panelinde çıkışı gözden geçirin.
İki özel durum türüyle ilişkili iletilerin görüntülendiğini doğrulayın:
İşlem raporunuz aşağıdaki "İşlem tamamlanamadı" iletilerini içermelidir:
Customer is making a $42 purchase Using 2 twenty dollar bills Using 0 ten dollar bills Using 0 five dollar bills Using 0 one dollar bills Could not complete transaction: InvalidOperationException: Not enough money provided to complete the transaction.Customer is making a $23 purchase Using 2 twenty dollar bills Using 0 ten dollar bills Using 0 five dollar bills Using 1 one dollar bills Cashier prepares the following change: A five A five A one A one Could not complete transaction: InvalidOperationException: The till is unable to make change for the cash provided.
Tebrikler, bir kod mantığı sorununu düzeltmek için yazar kasa uygulamasında hata ayıkladıysanız ve uygulamayı uygun özel durum işleme tekniklerini kullanacak şekilde güncelleştirdiniz.
Not
Bildirilen çıktı, till parasının artık dengelenmediğini gösterir. Kodda ek mantık hataları vardır. Visual Studio Code hata ayıklama becerilerinizi göstermek istiyorsanız bir sınama projesi modülü kullanılabilir!