この問題を解くためには… |
→ 応用編第7日目参照 |
---|
問題7:デリゲート・例外
prob7-1.(難易度:★)
以下のプログラムは、デリゲートを用いて、メソッドFunc1を呼び出している。このプログラムを改造し、デリゲートを用いて期待された実行結果のように、「Func2」と出力するように変更しなさい。ただし、24行目のdf()は変更しないこと。
プロジェクトProblemex7_1/Program.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Problemex7_1 { class Program { // デリゲート delegate void Delfunc(); static void Func1() { Console.WriteLine("Func1"); } static void Func2() { Console.WriteLine("Func2"); } static void Main(string[] args) { Delfunc df = new Delfunc(Func1); df(); } } }
Func1
期待される実行結果
Func2
prob7-2.(難易度:★)
以下のプログラムは、デリゲートを用いて、メソッドshowStarsを呼び出している。このプログラムを改造し、以下の期待される実行結果のようになるようにしなさい。ただし、処理は、47行目に出ているf(4)一行ですべてできるようにすること。
プロジェクトProblemex7_2/Program.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Problemex7_2 { // デリゲート delegate void Delegatefunc(int num); class Showcharas { // 星を表示 public void ShowStars(int num) { for (int i = 0; i < num; i++) { Console.Write("☆"); } Console.WriteLine(); } // 資格を表示 public void ShowBoxes(int num) { for (int i = 0; i < num; i++) { Console.Write("■"); } Console.WriteLine(); } // +を表示 public void ShowPlus(int num) { for (int i = 0; i < num; i++) { Console.Write("+"); } Console.WriteLine(); } } class Program { static void Main(string[] args) { Showcharas s = new Showcharas(); Delegatefunc f = new Delegatefunc(s.ShowStars); f(4); } } }
☆☆☆☆
期待される実行結果
☆☆☆☆
■■■■
++++
■■■■
++++
prob7-3.(難易度:★)
以下のプログラムは、実行時に例外が発生する。このプログラムにtry~catchを使って、適切な例外処理をつけて、期待する実行結果を得られるようにプログラムを変更しなさい。
プロジェクトProblemex7_3/Program.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Problemex7_3 { class Program { static void Main(string[] args) { int[] a = { 0 , 1, 2 }; // 配列の内容を表示 for(int i = 0; i < 4; i++){ Console.WriteLine("a[" + i +"]=" + a[i]); } } } }
a[0]=0
a[1]=1
a[2]=2
ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の境界外です。
場所 Problemex7_3.Program.Main(string[] args)場所 …
期待される実行結果
a[1]=1
a[2]=2
ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の境界外です。
場所 Problemex7_3.Program.Main(string[] args)場所 …
a[0]=0
a[1]=1
a[2]=2
配列の範囲を超えています。
a[1]=1
a[2]=2
配列の範囲を超えています。