ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

メソッドの再帰呼び出しについて

みなさんこんにちは

「疲れる」ってムダ機能じゃね?って最近思い始めたブルーノです。一日中疲れない体が欲しいなあ。さて今回はメソッドの再帰呼び出しというものについてまとめたいと思います。

 

メソッドの再帰呼び出しとは?

メソッドを書く際、その中で自らのメソッド自身を呼び出すことができます。

例)

public int method()

{

   .....;

   method();

   ......;

}

メソッドという名前のメソッド内で自らを呼び出しています。しかし単純にこう書いてしますといつまでたってもこのメソッドは終わらなくなってしまうため、終了させる工夫が必要になってきます。そこで今回は有名な再帰呼び出しの例として階乗の計算とフィボナッチ数列を紹介します。 

 

階乗の計算

階乗の計算とは、「n!」で表される特定の数nとそれ以下の全ての整数の積の計算のことですね。

例)5! = 5 × 4 × 3 × 2 × 1 = 120

これを再帰呼び出しを使って求めてみます。

f:id:covory10101101276:20170605160959p:imagef:id:covory10101101276:20170605161007p:image

CalcKaijoメソッドの中、13行目で自身であるCalcKaijoメソッドを呼び出しています。このメソッドの引数は与えられたnよりも1小さい数字になっています。ここがミソになっており、メソッドを呼び出すたびにこの再起呼び出しの方のCalcKaijoは1小さくなります。そのおかげでもしnが0になれば11行目で引っかかり、再帰呼び出しが終了する仕組みになっています。このように同じものを引き出すギミックを仕込む場合は当然ですがそのループを抜け出す工夫をしなければなりません。

f:id:covory10101101276:20170609135506j:image

 

同じような再帰呼び出しの例として、フィボナッチ数列というものも紹介しておきます。

 

フィボナッチ数列とは?

イタリアの数学者のフィボナッチさんが発見した数列で以下のような定義があります。

F1 = 1, F2 = 1,

nが3以上の時、Fn = Fn-1 + Fn-2

 つまり具体的に書くとこのようになります

F1 = 1

F2 = 1

F3 = F2 + F1 = 2

F4 = F3 + F2 = 3

F5 = F4 + F3 = 5

F6 = F5 + F4 = 8

.....

F3以降の式は再帰呼び出しを用いることで再現できます。実際にそれっぽく起こしてみましょう。

f:id:covory10101101276:20170807151857p:plain

f:id:covory10101101276:20170807151905p:plain

 

 F1とF2はそのまま式に当てはめちゃうと値がマイナスになって変なことになるのでコンティニューで飛ばし、先に書いておきました。今回はここまでとします。

 

大学生活の中では楽しいことも苦しいこともあるんですが自分から動くと結構楽しいことがあるんですねこれが(笑)ここ最近こそテストやらレポートやらで忙しかったですがこれからもどんどん書いていきたいと思います。早速台風には見舞われてますが、プログラミングは屋内でカタカタできるので楽で良いですね。宇宙兄弟おもしれー

数値-文字列間の変換と入力された型の判別について

みなさんこんにちは

"ヒトは飢えれば飢えるほどご飯を買い過ぎてしまう"

ブルーノです。今回はちょっとおさらいも兼ねて型の変換や判別の仕方についてまとめていきます。

 

Parseメソッド

今回は型変換の中でもよく使われるParseメソッドについて紹介します。例えば入力された値を計算に使いたい時、入力された値をそのまま使おうと思っても文字列型のため、うまく計算できません

Console.WriteLine("二乗したい数字を入力してください");

str nijou = Console.ReadLine();

このまま ReadLine で nijou を取得してもstring型なので加工できませんね。

じゃあ最初からintで代入させて

int nijou = Console.ReadLine にすればいいんじゃないか?って思ったんですがどうやらReadLineメソッドは文字列型しか返さないので入れる先は必然的にstring型になるようです。

そこで Parse メソッドを中に入れることで、任意の数字の型にしていれることができます。こんな風に

Console.WriteLine("二乗したい数字を入力してください");
int nijou = int.Parse(Console.ReadLine());

int.Parseの後の()に文字列型を入れることで左辺の用意した数値型の変数に変換できるのです。これで入力内容を数値型にできますね。では次に入力された内容が何型であるかを判別する方法に行きたいと思います。

 

Char.Is〇〇〇(str)について

先ほどは変換する方法についてやりましたが、そもそも入力された内容が必ず変換できるとは限らないのです。ユーザーの入力とは様々なのでそれを全てカバーする必要があります。今回はよく使われる

・Char.IsNumber()

・Char.IsDigit()

についてまとめます。この二つ、それぞれ()内に入力された内容が数字か、10進数かを求められます。返す値はbool型なので、主にif文で使われそうですね。

例)

 

f:id:covory10101101276:20170526142228p:imagef:id:covory10101101276:20170526142342p:image 

一桁でない場合や数字でない場合は弾かれるようにしました。にしてもアプリの仕様上インデントがすごく見づらくてスミマセン(汗

でも野球ファンの方は2桁がお気に入りの可能性があると思います。じつはTryParseメソッドというのを使えば2桁でしかももっと短くできるようです。c#内蔵のメソッドには便利そうなものがたくさんありますね。もっと勉強が必要そうです。

ArrayListクラスについて(既存のクラス)

みなさんおはようございます

梅雨に入りかけているのでしょうか雨の日が多くなってきてテニスがあまりできない日々が続いております。私はテニスを2日もやらないと感覚が狂ってしまう超不安定体質なので筋トレでなんとか運動している感覚をごまかしています。さて今回は既存の、用意されているクラスを使ってみたいと思います。

 

既存のクラスとは?

今までは自分でクラスをこしらえ、メソッドを定義してきましたが、実はC#にもともと入っているクラスというものがあるのです。Microsoftのホームページにはその中身が全部載っているのですがとても個人では定義しきれません。そんな膨大なクラスを内蔵してくれているおかげで我々はその一部を呼び出し使うことができるんですね。今回はその中でも便利なArrayListクラスについてやっていきましょう。ArrayListクラスはその名の通り列のリストを作るクラスで、Addメソッドで中にデータを格納し、Countプロパティでその要素数を確認します。

ArrayList インスタンス名 = new ArrayList(); でインスタンスを生成し、

Addメソッド:インスタンス.Add(格納するデータ);

Countプロパティ:int 変数 = インスタンス名.Count;

f:id:covory10101101276:20170526083155p:plain

f:id:covory10101101276:20170526083207p:plain

Addメソッドでarという名前のArraListクラスに数字を入れていき、ar.Countで要素の数を取得して平均値を出し表示するというものです。これも少し穴があり、入力画面で数字以外を入力するとスローされてしまいます。今度はそこらへんのケアの仕方も書いていきたいと思います。以上でArrayListクラスの説明を終わります。

コンストラクタとデストラクタ

みなさんこんばんは

給料日を迎えて少しウキウキしているブルーノです。しかしお金を貯めても使うのがもったいなくて結局ご飯くらいしか高いものを買えない貧乏性なのです(笑)さて今回は少し特殊なコンストラクタとデストラクタというメソッドについてやっていきます。

 

コンストラクタとは?

コンストラクタとは、インスタンスフィールドの初期値を設定したり、そのほかのものの初期設定をするためのものです。全てのクラスはコンストラクタ(constructor)というメソッドを持っています。ん?今までそんなメソッド定義した覚えないぞ?どうやら自分でコンストラクタを書かない場合、引数を取らないコンストラクタが自動で作成されているそうです。この自動で作成されているコンストラクタをデフォルトコンストラクタと言います。コンストラクタには以下の特徴があります。

・戻り値はなし(voidという意味ではない)

・クラスと同じ名前になる

・パラメータ(引数)を持つことができる(自分で書く場合は)

オーバーロードができる

・オブジェクトが生成されると同時に勝手に呼び出される

 4番目の中二感溢れるかっこいい名前のは後で書きます。

単純な例を書いてインスタンスフィールドの初期設定をしてみます

f:id:covory10101101276:20170525000519p:plain

f:id:covory10101101276:20170525000529p:plain

24行目でshowxメソッドしか呼び出していないのに実行時にコンストラクタ部分が呼び出されていますね。これは23行目でオブジェクトを生成した時に自動でコンストラクタが呼び出され、xに10を代入しその旨を伝えたからなのです。このようにクラス内で生成した変数の初期設定をするのに主に使われるようです。では次に先ほどでたオーバーロードについて説明します。

 

オーバーロードとは?

とってもかっこいいですよね。オーバーロードオーバーロードとは、その引数のデータ型や数が違う同名のメソッドを定義することです。ん?どういうこと?ちょっと言葉じゃ難しいですね。実際に作ってみます。

f:id:covory10101101276:20170525230312p:plain

f:id:covory10101101276:20170525230318p:plain

f:id:covory10101101276:20170525230323p:plain

19, 27, 35行目において同じ名前のコンストラクタを3つ定義しています。これらの違いは引数の組み合わせで、渡す引数によってどのコンストラクタが呼び出されるかが変わるわけです。この引数とメソッドの名前の組み合わせをシグニチャと呼びます

ちなみに13,14行目の〇〇◯.ToStringとはその前のデータを文字列(string型)に変換するメソッドです。

このように同じ名前のメソッドを多重に定義することをオーバーロードと言います。そして最後にデストラクタについて説明します。

 

デストラクタとは?

new演算子の役割はオブジェクトを生成することだと前回説明しました。オブジェクトを生成するにはメモリ容量の空きが必要です。C#では、不要になったオブジェクトのメモリ容量を自動的に解放する機能がついています。この機能をガベージコレクションというのですが、ガベージコレクションが行われる前にデストラクタというメソッドが実行されます。これはコンストラクタと同じように定義しなければデフォルトコンストラクタが自動で実行されます。メソッドではありますが他の普通のものに比べてパラメータリスト(引数)はありませんし戻り値もありません。普通の言語では生成したオブジェクトの後始末をこのデストラクタで色々書くようですがC#にはガベージコレクションがあるのであまり使われることはありません。短い説明になってしまいましたがこんな感じです。

 

いかがでしたでしょうか。インスタンス変数を初期化する目的で主に使われるコンストラクタ、そして呼び出し元が渡す引数によって初期設定を変更できるオーバーロードについて今回はやりました。だんだん難しくなってきました。外では雨続きで楽しみのテニスもできない分こっちに専念したいと思います。

 

【お絵かき】初デジタル!【遊戯王?】

f:id:covory10101101276:20170525205700p:plain

サークルの先輩に進められて勢いでintuos drawを買ってみました。そして早速初デジタルに取り組んでみたのですが絵も素人ながらデジタルなんてやったこともないので見るに耐えない第一号作品ができました!なんかかっこいいポーズが思い浮かばなかったので独特なポーズに定評のある遊戯王スタイルで書いてみました!この方は本当に思いつきだけで生まれてきました。飽きないように続けていけたらいいなーと思います笑

【お絵描き】ソラ、キングダムハーツ

f:id:covory10101101276:20170525055925j:image

キングダムハーツFinal Mixのタイトル画面のソラです。サークルの先輩にアタリというものを教わったので書いてみました。でもパーツをよく見ると勝手に補完してる部分が多いんですよね。ちゃんと本物に似せないと笑

キングダムハーツを最初にプレイしたのは中1か2の時で最初のはbbsでした。最初にbbsをやったためストーリーは分かんない演出が多々ありましたが世界観とアクションの多彩さに感動して一気に3人分やり込みました笑 その後すぐに友達に1と2を借りてコレもやり込みました。2の方がスピーディーでカッコよくて派手さもあるんですがゲーム全体の雰囲気は1の方がディズニーっぽくて好きですね。もちろん2や358/2のスクエニらしいスタイリッシュな雰囲気も大好きです笑 キングダムハーツ3が発表されてからもうずいぶん経ちますが未だに楽しみで仕方ありません。2.8も1.5+2.5も買ったし、ブラウザ版のxもストーリーを最後まで見ましたので予習はバッチリです👍

早くでてくれえー😭😭

メソッドについて

みなさんこんにちは

評判を聞きつけてPS4FFX,X-2を買ってやってみたところあまりのハマりっぷりに時間を取られてしまうブルーノです。ティーダの心中を考えると色々切なかった....僕はFFはシリーズ通して半分くらいしかやったことのないにわかですがやっぱりターン制だと落ち着いてなおかつじっくり考えられるので楽しいです。最近だとバイオハザード7の「21」にも通ずる点がありました。さて今回は、クラスの中身の機能の部分、メソッドについてまとめていきます。

 

メソッドとは?

メソッド(method)は英語で「方法」とか「方式」、「道筋」なんて意味がありますが、プログラミングではまさしくクラスがどう動くかについてを記述するものがメソッドになります。メソッドは次のように定義します。

アクセス修飾子 復帰型 メソッド名(パラメータリスト)

例)public void SimpleMethod(int x, int y);

 

今回見覚えがないのは復帰型パラメータリストですね。

復帰型:メソッドが返すデータの型(種類)です。中で加工したものがどんなデータで出てくるかを表します。ちなみに出てくるデータのことを戻り値と言います。データを返さない場合は例のように void を指定します。

パラメータリスト:メソッドを呼び出す(使う)際のメソッドへ送る変数をここに記述します。この変数をパラメータ、もしくは引数(ひきすう)と言います。例ではどうやら int x と y がどこか別のクラスかメソッドから送られてこのメソッドに代入されるようですね。

 実際にメソッドを定義したプログラムを作ってみます

f:id:covory10101101276:20170524195602p:plain

f:id:covory10101101276:20170524195611p:plain

5行目のAdd(足し算)メソッドで引数xとyを足すことを定義して、それを変数zに代入しています。この最後のreturn文がメソッドの返す値になります。そして17行目、Mainメソッド内でBruno009クラスを生成し、19行目では a.Add(200, 300) でAddメソッドに200と300を渡して加工しています。今までは「クラス.インスタンス」だったのがインスタンス.メソッド」になっていますね。ややこしいのでまたまとめておきます。

今回の例でのそれぞれの用語のポジション

クラス:Bruno009, Bruno010

インスタンス:a (17行目でBruno009クラスのインスタンスaが作られた)

メソッド:Add (中で足し算を定義している)

 

こまめに用語の整理をしておかないと私はあまりよくできた頭ではないので...

 

いかがでしたでしょうか。だんだん複雑になってきたのでちゃんと整理しながら進めていきたいと思います。うーん。やっぱりプログラミング楽しいなあ