[ad_1]
1 つのインターフェイス、インターフェイスを実装する抽象クラス、および抽象クラスを継承してメソッドの 1 つをオーバーライドする 2 つの (男性と女性) クラスがあります。 主に、人を女性または男性にする場合 (例: IPerson p1 = new Female();)。 そして、コンソールアプリメニューが必要です。(ネストされた)スイッチケースを使用しましたが、可読性が低いため、別の解決策を探しています。助けてください。申し訳ありませんが、C#は初めてです..コードは以下のとおりです…
私が試したこと:
C#
IPerson p1 = new Female(); byte choice, choice1, choice2; DisplayMenu(); choice = byte.Parse(ReadLine()); Clear(); while (choice != 4) { switch (choice) { case 1: f1.LiftLeg(); Thread.Sleep(1000); Write("Press 1 to lover a leg: "); choice1 = byte.Parse(ReadLine()); switch (choice1) { case 1: f1.LowerLeg(); Thread.Sleep(2000); Clear(); break; } break; case 2: f1.LiftArm(); Write("Press 1 to lower arm: "); choice2 = byte.Parse(ReadLine()); switch (choice2) { case 1: f1.LowerArm(); Thread.Sleep(2000); Clear(); break; default: WriteLine("Invalid input."); break; } case 3: f1.Pee(); break; default: WriteLine("You entered " + choice + " please only use numbers from 1 to 4."); break; }
解決策 1
簡単な方法は、コードを (外側のスイッチ) ケースの専用メソッドに移動することです。
C#
switch (choice) { case 1: ProcessLiftLeg(f1); break; //..
と
C#
ProcessLiftLeg(F f) //'F', because, in your code, there is no hint about 'f1' type { f.LiftLeg(); Thread.Sleep(1000); Write("Press 1 to lover a leg: "); var choice = byte.Parse(ReadLine()); if ( choice == 1) { f.LowerLeg(); Thread.Sleep(2000); Clear(); } }
注意してください、あなたの while
同じものを無期限に繰り返す choice
価値。
解決策 2
まず、 while ループが閉じられていないため、何かが欠落している必要があり、閉じられていたとしても何も変わらない 選択 だから無限です。 また、ケース 2 には、最初のスイッチ ケースのブレークがありません。 それで、それらがそこにあると仮定しましょう。
読みやすさを求めている場合は、定数を使用することをお勧めします 選択 ケース値。 これにより、コードを読んでそれぞれが何をするかを確認する必要がなくなり、すぐに認識できるようになります。 内側のスイッチ (選択1) は、スイッチの代わりに if ステートメントを使用する方が適切です。 これにより、選択の線引きがあり、内側と外側が異なることがわかります。
そうでなければ、明らかに読めないものは他にありません。
[ad_2]
コメント