【報告】ブログ更新、小休止をいただいておりました。 [Java]
更新が滞っておりました。
一つ目に応募した企業からは履歴書・職務経歴書を求められ、提出しましたが、書類審査通過ならずでした。
就職活動しつつも、自分の能力を高めるために、2つの資格習得を目指し始めました。
Java SE 7/8 Bronze
ITパスポート
です。これらは、IT業界に務めている人からしたら「それが何?」レベルのものだと思いますが、私のような初心者にとっては、基本知識を徹底するにはもってこいだと思います。
これらの勉強記録もここに記していけたらなあと思います。
自分の価値観・考え方を整理するために、やや哲学的(?)な記事もこれから増えてくると思います。
タイトルとカテゴリーを見て興味がなさそうならスルーしていただけると幸いです。
メソッドを使うとなぜ開発効率が高まるのか? [Java]
前回、引数の受け渡しについて説明しました。
今回は、「メソッドを使うことでなぜ開発効率が高まるのか?」をサンプルコードを通して説明していきます。
まずは下のコードを見てください。
public class Main{
public static void main(String[] args){
System.out.println("一郎、こんにちは");
System.out.println("二郎、こんにちは");
System.out.println("三郎、こんにちは");
}
}
実行結果
一郎、こんにちは
二郎、こんにちは
三郎、こんにちは
コードに重複がありますね。
このような場合にはメソッドを使うとスッキリします。
今回は画面に「◯◯、こんにちは」と表示するというのが共通しているので、ここをメソッドにして切り出します。
以下のようなコードになりました。
public class Main{
public static void main(String[] args){
hello("一郎");
hello("二郎");
hello("三郎");
}
public static void hello(String name){
System.out.println(name+"、こんにちは");
}
}
こうすることで、コードがスッキリしましたし、何より、見通しがよくなりました。
mainメソッドのメソッドブロック({}内)では、helloメソッドに一郎、二郎、三郎の三つを引数として渡し、呼び出すというだけです。
コードをパッと見て、意味がわかりやすいですね。
また、javaにはAPIと呼ばれるあらかじめ用意されたメソッドがあります。
つまり、自分でメソッドを作らなくとも、APIを調べ、それを利用することで開発効率を高めることができます。
APIについてはまた別記事にて説明します。
今回は引数として1つを受け渡しましたが、複数を引き渡しこともできます。
次回は、引数に名前と挨拶の2つを指定し受け渡してみましょう。
引数を渡す [Java]
前回は引数のイメージについて説明しました。
今回は、実際にメソッド間で引数の受け渡しを行います。
下のコードをみてください。
public class Main{
public static void main(String[] args){
hello("太郎");
}
public static void hello(String name){
System..out.println(name+"、こんにちは");
}
}
mainメソッドとhelloメソッドの2つのメソッドがあり、string型の引数、太郎の受け渡しを行っています。
mainメソッドからhelloメソッドに太郎を渡し、helloメソッドでは受け取った太郎を使って、「太郎、こんにちは」と画面に表示させています。
mainメソッドで、そのhelloメソッドを呼び出しているので、実行結果は以下のようになります。
実行結果
太郎、こんにちは
前記事(→ http://weekly-programmer.blog.so-net.ne.jp/2015-08-14-1 )
で、料理を例に説明しましたが、mainメソッドがあなた、helloメソッドがパートナー、太郎(引数)が食材です。
あなたがパートナーに食材を渡し、調理され出来上がったものをあなたが受け取ります。
mainメソッドがhelloメソッドに引数(太郎)を渡し、helloメソッド内で処理されたものをmainメソッドが受け取るということですね。
今回は引数に太郎を入れてみましたが、ここに二郎、三郎といれるだけで画面上に「◯◯、こんにちは」と表示させることができます。
次回は、いろいろな引数をいれて説明します。
引数のイメージをつかもう [Java]
前回はメソッドの呼び出し方について説明しました。
メソッド名(引数)
で呼び出せるのでしたね。
その中で引数という言葉が出てきました。
今回は、この引数について説明します。
今回はプログラミングではなく、日常生活に置き換えて、引数のイメージをつかんでいきましょう。
まずは、以下の2つのパターンを見てください。
①ご飯を自分で作る
食材を用意し、台所で料理し、完成したものを食べます。
②ご飯をパートナーに作ってもらう
食材を用意し、それをパートナーに渡し、料理してもらいます。完成したものはあなたが食べます。
①のパターンの場合は、自分でご飯を作り、自分で食べるので、全て自分の中で完結しています。
対照的に②のパターンの場合は、食材をパートナーに渡し、完成したものを自分で食べているので双方向のやり取りをしています。
あなたとパートナー間で食材の受け渡しを行っているのです。
引数とはまさにこの食材のことなのです。
食材を渡し、それに何らかの処理を加えて出来たものを受け取る。
プログラミングにおいては、引数を渡し、それに何らかの処理を加えて、形が変化したものを呼び出し元で受け取るということになります。
次回は、実際にプログラミングにおいて、引数をどのように受け渡しているのか、サンプルコードを例に説明していきます。
メソッドの呼び出し [Java]
前回はメソッドとは何なのかについて説明しました。
今回はメソッドの呼び出し方について説明します。
メソッドの呼び出し方はとても簡単で、
メソッド名(引数)
です。
例えば、
public static void methodA()
というメソッドがあり、これを呼び出す場合は、
methodA()と呼び出せば良いわけです。
簡単ですね。
次回は、引数について説明していきます。
メソッドの定義 [Java]
前回、メソッドとは何かについて説明しました。
今回は、メソッドの定義について説明します。
メソッドの基本形は以下のようになっています。
public static 戻り値の型 メソッド名(引数リスト){
具体的な処理
}
戻り値や引数などの単語が出てきましたが、これらについてはまた別の回で詳しく説明します。
最もなじみのあるメソッドとしては
public static void main(String[] args){
}
がありますね。
これはメインメソッドと呼ばれていて、メソッドの中でも少し特殊です。
言うならば、メソッドを束ねる役割をする、司令官のようなものです。
mainメソッドから他のメソッドに指令を出すことでプログラムが動きます。
次回は、実際にメインメソッドから他のメソッドを呼び出す方法について説明します。
メソッドとは? [Java]
前回まで配列について説明してきました。
今回はメソッドについて説明します。
個人的に、このメソッドを理解できるかどうかがかなり鍵になっています。
まず、メソッドとは何なのかについて説明します。
メソッドとは簡単にいうと、一つの処理をまとめたものです。
コードが長くなるにつれて、全体を把握することが難しくなります。
そこで、メソッドというまとまりをコードから切り出すことで、見通しをよくするということです。
コードはこのメソッドの集まりであるといっても良いかもしれません。
画面に文字を表示するメソッドなど、さまざまなものが考えられますね。
プログラムは、さまざまなメソッドを利用し、時には自分でメソッドを作りながら書いていきます。
次回は、このメソッドの基本形について説明します。
多次元の配列 [Java]
前回は、文字列の長さを得る方法について説明しました。
今回は多次元の配列について説明します。
小学校の集会を例にすると、
通常の配列が、1年1組という組というまとまりに対して一斉に指示を出すように捉えるのに対して、
多次元の配列は、 1年1、2、3、4、5組というように、組をさらに束ねて学年に指示を出すイメージです。
使う機会はなかなか少ないと思いますが、説明しておきます。
基本的には通常の配列とほぼ同じ使い方をします。
比較してみましょう。
(通常)
配列の宣言
要素の型[] 配列変数名=new 要素の型[要素数];
または、
要素の型[] 配列変数名=new 要素の型{要素を列挙};
または、
要素の型[] 配列変数名={要素を列挙};
要素の利用
配列変数名[添え字]
(多次元の配列)
配列の宣言
要素の型[][] 配列変数名=new 要素の型[要素数][要素数] ;
または、
要素の型[][] 配列変数名=new 要素の型{{要素を列挙},{要素を列挙}};
または、
要素の型[][] 配列変数名={{要素を列挙},{要素を列挙}};
要素の利用
配列変数名[添え字] [添え字]
ほとんど同じですね。通常の配列が組単位という「列」だけであると考えるなら、多次元配列は「列」と「行」といったところでしょうか。
その分、[]や{}が一つ増えていることになります。
次回はいよいよメソッドについて説明していきます。
文字列の長さを得る方法 [Java]
前回は配列の拡張for文について説明しました。
その中で、配列の要素数を得る方法を説明しました。
配列変数名.length
ですね。
今回は文字列の長さを得る方法について説明します。
文字列変数名.length()
です。
()が付くかどうかの違いです。
例えば、String型の変数hiraganaに、あいうえお、と代入した場合、 hiragana.length()は5となります。
次回は多次元の配列について説明します。
拡張for文 [Java]
配列の要素数を得る方法 [Java]
前回は配列の作り方と、指定した番号の配列を取り出す方法について説明しました。
今回は、さらに配列をどのように使っていくか説明していきたいと思います。
まず、配列の要素数を得る方法について説明します。
配列は同質なものをグループとしてとらえる方法でした。
そのグループを構成する要素の数は、次の式で得ることができます。
配列変数名.length
例えば、前回、点数を一つのまとまりとして配列でとらえることについて説明しましたが、これを画面に表示させる際に、この式が使えます。
public class Main{
public static void main(String[] args){
int[] score={40,50,60};
for(int i=0 ; i<score.length ; i++){
System.out.println(score[i]);
}
}
}
int型の配列scoreの要素に40、50、60を代入しました。
そして、for文でループさせることにより、添え字([]の中のi)が0→1→2と増えていきます。
iがscore.lengthに達したところで終了になるのがポイントです。
仮に、配列の要素数が増えたとしても、変更するのはint[] score={40,50,60};の{}の中だけで済みます。
for文についてわからない場合は、下記を参考にしてみてください。
・繰り返しのプログラム その4→( http://weekly-programmer.blog.so-net.ne.jp/2015-07-29 )
・繰り返しのプログラム その5→( http://weekly-programmer.blog.so-net.ne.jp/2015-07-30-1 )
・繰り返しのプログラム その6→( http://weekly-programmer.blog.so-net.ne.jp/2015-07-31 )
・繰り返しのプログラム その7→( http://weekly-programmer.blog.so-net.ne.jp/2015-08-02 )
次回は今回のサンプルプログラムを別の形で書く方法について説明します。
配列に数値を代入・取り出し [Java]
前回、配列の作り方について説明しました。
今日は配列を利用する方法について説明します。
配列を利用するというのは、配列を人が一列に並んだ状態であると考えると、①前から2番目の人は70点です(=配列に数値を代入する)、②前から3番目の人は何点ですか?(=数値を取り出す)、ということです。
①数値を代入する
数値を代入するときは、
score[1] = 70;
と表現します。注意するのは[]の中の数字は0から始まります。前から2番目の場合は1です。
②数値を取り出す
数値を取り出す時は、
score[2];
と表現します。
次回は配列の使用方法についてもう少し説明します。
配列を使って、データをまとめよう [Java]
前回、配列を使うことで、一斉に指示を出すことができるようになるため、コードの重複が減り、見通しが良くなるということについて説明しました。
今回は実際に配列を使うにはどうしたらよいかについて説明します。
配列を使うためには、変数aをint型であると宣言するのと同じように、①データ型、②変数名を宣言しなければなりません。
→int[] score;
さらに、用意した変数に要素を代入します。今回は5つの要素を代入しています。
→score = new int[5];
これらを同時に宣言することもできます。
→int[] score = new int[5];
また、それぞれの要素が何なのかを表す方法もあります。
→int[] score = new int[]{70,80,40,20,60};
または
→int[] score = {70,80,40,20,60};
このようにして配列を作り出すことができます。
次回は、このようにして作り出した配列のそれぞれの要素を出し入れする方法について説明します。
配列を使うメリットとは? [Java]
プログラミングにおいて配列とは、同じ性質を持ったデータをひとまとまりのものとして捉える方法のことです。
例えば、得点を管理するプログラムがあったとします。(以下参照)
public class Main{
public static void main(String[] args){
int japanese =70;
int math =80;
int english =90;
・・・
合計点を出したり、平均点を出したり・・・といった操作をする時に、配列を使うことにより、japaneseやmathといいたそれぞれの教科をひとまとまりのものとして扱うことができるため、ソースの重複を避けることができるのです。
例えば、小学校を例にしましょう。
1クラス30人で1学年に4クラス、6学年あります。
学校の先生は集会の時には、クラスというまとまりを従えて(指示を出して)います。
これがもし、クラスというまとまりがなかった場合にはどうなるでしょうか?
一人ひとりに指示を出さなければなりません。
「たけしくんは一番端の先頭に並んで、その後ろに太郎くんが並んで・・・」
というように途方もない作業をしなければなりません。
しかし、あらかじめ、クラスというまとまった集団を作っておくことで、
「1組は右端に整列してください」
というように一つの指示を出すことで事足りるのです。
配列とはまさにそういうことで、個別に出していた指示を、集団に出すために作り出したまとまりのことなのです。
例にあげた得点のプログラムの場合、国語の得点、数学の得点・・・をまとめて得点という箱に入れてしまおうという考え方なのです。
次回は実際に配列を用いるためにはどうすればよいのかについて説明していきます。
繰り返しのプログラム その7 [Java]
前回、ネストについて説明しました。
前回挙げた例はforによる繰り返し文の中にifによる条件分岐の文が入っている多重構造でした。
今回はforをネストさせて掛け算の九九を表示したいと思います。
public class Main{
public static void main (String [] args){
for (int i=1 ; i<10 ; i++){
for(int j=1 ; j<10 ; j++){
System.out.print(i * j);
System.out.print(" ");
}
System.out.println("");
}
}
}
表示結果
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
…
落ち着いて見ていきましょう。
iとjは1から9まで増加します。
iはjのループが終了したら1増加するという構造になっています。
つまりiが1のとき、jが1〜9まで1ずつ増加し、その後iが2に増加し、再びjが1〜9まで増加・・・というのを繰り返す構造です。
ちなみに、System.out.print( )は改行を伴いません。したがって(" ")とすることで、単純に空白(スペース)を表すことになります。
System.out.println( )は改行を伴うため、("")とすることで、単純に改行を表します。
以上で、繰り返しの説明を終了します。
これまで、①順次、②分岐、③繰り返しのそれぞれについて説明してきました。
これら3つを使いこなせればどんな構造のプログラムも書けることになります。
次回からは配列という仕組みについて説明していきます。
繰り返しのプログラム その6 [Java]
前回はforの()内を変化させるとどうなるのかについて説明しました。
今回はネストと呼ばれるものについて説明します。
ネストは入れ子とも呼ばれています。繰り返しの中に、さらに繰り返しがあるような、多重構造のことをネストといいます。
日本語で例をあげます。
画面に0から1ずつ5まで数字を増やし表示します。ただし、3の時だけ飛ばします。
12
4
5
のようなプログラムですね。
これは以下のようなコードです。
public class Main{
public static void main(String[] args){
for(int i=1 ; i<5 ; i++){
if(i==3){
continue;
}
System.out.print.ln(i);
}
}
}
for文の中にif文が入っています。このような多重構造をネストといいます。
continueは、その周だけを飛ばすという意味です。
次回は掛け算の九九を画面上に表示させてみましょう。
繰り返しのプログラム その5 [Java]
前回はfor文の基本亭な構造について説明しました。
簡単におさらいします。
for(int i=0 ; i<10 ; i++)
int i=0 これは、初期化処理と呼ばれています。iが0から始まるということを表しています。
i<10 これは、条件式です。
i++ これは、繰り返し処理です。 繰り返すごとに行われることです。
今回はこれらを変化させるとプログラムがどうなるかを説明していきます。
public class Main{
public static void main(String[] args){
for(int i=0 ; i<10 ; i++){
System.out.println("こんにちは");
}
}
}
これは画面上に「こんにちは」と10回表示するプログラムでした。
forの()内をさまざまに変化させるとどうなるか、いくつか例をあげていきましょう。
for(int i=0 ; i<5 ; i++)
5回繰り返します。
for(int i=1 ; i<10 ; i++)
初期化処理が0でなく1なので、9回繰り返します。
for(int i=0 ; i<10 ; i+=2)
繰り返し処理はi+=2なので、iが2ずつ増える。よって、5回繰り返します。
for(int i=10 ; i>0 ; i--)
初期化処理がint i=10、条件式がi>0、繰り返し処理がi--なので、10から0まで1ずつ減らしていく。よって、10回繰り返します。
次回はさらに別パターンについて説明していきます。
繰り返しのプログラム その4 [Java]
前回まで、while文、do-while文を使った繰り返しのプログラムについて説明しました。
今回はforを使った繰り返し文について説明します。
forは「〜回」といった意味です。
while文では条件を満たしている間、繰り返されるので、回数を明示することはありませんでした。
しかし、今回説明するforは回数を指定します。
つまり、for文は〜回繰り返すという文です。
それでは実際にサンプルコードを見ていきましょう。
public class Main{
public static void main(String[] args){
for(int i=0 ; i<10 ; i++){
System.out.println("こんにちは");
}
}
}
これは画面上に「こんにちは」と10回表示させるプログラムです。
for(int i=0 ; i<10 ; i++)
を分解して、
- int i=0
- i<10
- i++
のそれぞれについて説明していきます。
1)int i=0
これは初期化処理と呼ばれています。
繰り返しのことをループと呼びますが、そのループが始まる時に最初に実行される文です。
今回の場合、最初にint型の変数iに0を代入して初期化しています。ちなみに、この変数iのことをループ変数と呼びます。
わかりやすくいうと、0から始まるということです。
2)i<10
これは繰り返し条件を表します。
ifやwhileの時に出てきた条件式のようなものだと思ってもらえれば良いです。
i<10を満たしている間、繰り返されるということです。
3)i++
これは繰り返し時処理を表しています。
繰り返された時に実行されます。
今回のサンプルコードの例の場合、画面にこんにちはと表示させた後、iに1を足します。
結局、1、2、3をまとめると、
1)で繰り返しの最初の数字を指定し、繰り返される度に
3)の処理を行ない、
2)の条件が満たされなくなったらfor文を抜け出します。
サンプルコードでは、
0から始まり、画面にこんにちはと表示させる度に1を足し(0→1→2→・・・)、i<10つまりiが10になった時点でfor文を抜け出します。
次回説明する部分はさらに発展的な内容になるのでここできちんと理解できるよう、さらに詳しく説明します。
i=0
→こんにちは
→iに1を足す。i=1
→こんにちは
→iに1を足す(以下省略)。i=2
→こんにちは
→i=3
→こんにちは
→i=4
→こんにちは
→i=5
→こんにちは
→i=6
→こんにちは
→i=7
→こんにちは
→i=8
→こんにちは
→i=9
→こんにちは
→i=10
ここで、i<10を満たさなくなったので、for文を抜けます。
結局、基本形である
for(int i=0 ; i<10 ; i++)
の10の部分を5にすれば5回繰り返すことになり、100にすれば100回繰り返すことになります。
次回は「int i=o」や「i++」の部分に違ったものを入れてらどうなるのかについて説明していきます。
アウトプットを前提としたインプットで理解の質は高まる。(プログラミングを学び始めて一ヶ月でぶつかる課題) [Java]
繰り返しのプログラム その3 [Java]
前回、whileについて説明しました。
基本形は、
while(条件式){実行内容
}
でした。
条件式を満たしている間、 実行内容を実行し続けます。
今回も前回とほとんど同じです。今回はdo-while文です。
普通のwhile文と比べて、do-while文が異なっているのは、必ず最低一回は実行するということです。
基本形は、
do{実行内容
}while(条件式);
です。
プログラムは上から順に実行されていきます。
普通のwhile文は条件式を評価してから実行します。
それに対して、do-while文は上に実行内容がきているので、実行してから条件式を評価します。つまり、必ず一回は実行されるのです。
次回はforを用いた繰り返しについて説明します。
繰り返しのプログラム その2 [Java]
今回は繰り返しのwhileについて説明していきます。
whileには英語で「〜している間」という意味があり、 プログラミングにおいては条件を満たしている間実行し続けるのでしたね。
それでは下のサンプルコードを見てください。
public class Main{
public static void main(String[] args){
System.out.println("温度が1度ずつ上がります。何度まで耐えられるかな?");
int temp=30;
while(temp=<40){
System.out.println("ただいまの温度は" + temp + "度です。");
temp++;
}
System.out.println("暑いですね〜");
}
}
実行結果
温度が1度ずつ上がります。何度まで耐えられるかな?ただいまの温度は30度です。
ただいまの温度は31度です。
ただいまの温度は32度です。
ただいまの温度は33度です。
ただいまの温度は34度です。
ただいまの温度は35度です。
ただいまの温度は36度です。
ただいまの温度は37度です。
ただいまの温度は38度です。
ただいまの温度は39度です。
ただいまの温度は40度です。
暑いですね〜
System.out.println()はおなじみですね。画面に文字を表示します。
今回説明するのは
int temp=30;while(temp=<40){
System.out.println("ただいまの温度は" + temp + "度です。");
temp++;
}
の部分。
int型の変数tempに30を代入して初期化します。
そしてwhile文に突入するわけですが、if文と構造は非常に似ています。
if文は、
if(条件式){実行内容
}
でしたね。実はwhile文を同じで、
while(条件式){実行内容
}
なのです。
意味は、「「条件式」を満たしている間、「実行内容」を実行し続ける」です。
これにあてはめると、
「temp=>40」を満たしている間、System.out.println("ただいまの温度は" + temp + "度です。");
temp++;
を実行し続ける
となります。
つまり、tempが40未満である間は、画面に「ただいまの温度は30度です。」 と表示し、温度を1ずつ増やし続けるということです。
tempが40に達した時点でwhile文のブロックを抜け出します。
次回は、do-while文というwhile文から派生した繰り返しの文について説明していきます。
繰り返しのプログラム その1 [Java]
前回まで分岐のプログラムについて説明してきました。
そもそもプログラムは
- 順次
- 分岐
- 繰り返し
の3つで構成されているのでしたね。( http://weekly-programmer.blog.so-net.ne.jp/2015-7-13 )
それぞれの大まかなイメージは、
①順次→順次→順次→
②分岐→分岐→→分岐→
→分岐→
③繰り返し→↓ →↑←←←←←
です。
今回から5回ほどかけて「繰り返し」のプログラムについて説明していきます。
「分岐」のときはifとswitchの2種類がありました。
「繰り返し」も同様に2種類あります。
それが、whileとforです。どちらも馴染みのある英単語ですね。
whileは「〜している間」といった意味です。
例)While you are cooking,~ (あなたが料理をしている間、〜)
forは英語では回数を表したりしますね。
例)I've been to Japan for three times.(私は3回、日本に行ったことがあります。)
英語の意味とプログラミングにおけるwhileとforの意味をリンクさせて覚えておくと良いと思います。
プログラミングにおいてwhileは条件を満たしている間、繰り返し実行します。
ifは指定された回数、繰り返します。
次回はwhileについて説明していきます。
分岐のプログラム まとめ② [Java]
今回は分岐のプログラムの総まとめをしたいと思います。
分岐のif
分岐のプログラムは基本的にifを使うのでしたね。
基本形は
if(条件式){実行内容①
}else{
実行内容②
}
でした。三つ以上に分岐させたいなら
else if(条件式){実行内容
}
を増やせばいいのでした。
例えば四つに分岐させる場合は
if(条件式①){実行内容①
}else if(条件式②){
実行内容②
}else if(条件式③){
実行内容③
}else{
実行内容④
}
です。
ifの条件式()の中に入る演算子は特に関係演算子と呼ばれ、整数が等しいかどうか調べるときは「==」、文字列が等しいかどうか調べるときは「equals」を使うのでしたね。
分岐のswitch
ifの分岐が増えれば増えるほど、switchによる条件分岐を利用するのが便利になるのでした。
基本形は、
switch(変数名){case1:
実行内容①;
break;
case2:
実行内容②;
break;
case3:
実行内容③;
break;
default:
実行内容④;
}
です。
分岐が増えればcaseをそれだけ増やせば良いのでした。
switchのよる条件分岐の式で注意すべきはbreakでした。
breakを入れることでswitch式を抜け出すのでした。
逆にいうと、switchを入れないことで、case1,2で同じ内容を実行できるというメリットも享受できるのでした。
詳しいソースコードについては、前記事を参照してください。
次回からは繰り返しのプログラムを説明します。
分岐のプログラム まとめ① [Java]
分岐のプログラム その7 [Java]
前回はswitchを使った分岐のプログラムについて説明しました。
switchを使うことにより、if elseで書いた時に長くなりがちなコードがスッキリし、見通しが良くなるのでしたね。
今回はswitchの応用編。(といってもそんなに複雑ではありません・・・)
今回はおみくじを例に説明していきます。おみくじには大吉、吉、小吉、末吉、末小吉、凶、大凶と7種類あります。
(ちなみに筆者はこれまで末小吉を見たことがありません。)
ところで、それぞれがどのくらいの比率で入っているか知っていますか?
神社により異なるらしいのですが、概ね吉、凶、大吉あたりが多いようです。
「おみくじプログラム」を作ることを考えた時、何とかしてこの比率もプログラムに反映できたらいいですよね。
今回はswitchを使って簡単に比率も考慮に入れた「おみくじプログラム」 を作ってみたいと思います。
今回はプログラムをわかりやすくするため、大吉、吉、小吉、凶、大凶の5つのくじが入っているとします。
それぞれの比率は
大吉:吉:小吉:凶:大凶
= 2:3: 1:2: 1
とします。
ifを使って書くとなると相当めんどうなことになりそうですが、switchを使うことで簡単に書くことができます。
public class Main{
public static void main(String[] args){
System.out.println("占います。");
int uranai=new java.util.Random().nextInt(9)+1;
switch(uranai){
case1:
case2:
System.out.println("大吉");
break;
case3:
case4:
case5:
System.out.println("吉");
break;
case6:
System.out.println("小吉");
break;
case7:
case8:
System.out.println("凶");
break;
case9:
System.out.println("大凶");
}
}
}
前回はcase1の場合は〜、case2の場合は・・・、というようにbreakで区切ることによってそれぞれのケースの実行結果を記述していきました。
ポイントは「breakで区切る」ということです。
breakまできたらswitchの大きな括りから抜け出すのでしたね。ということは、逆に言うとbreakが来るまでは抜け出せない(抜け出さない) ということです。
それを利用して、case1と2の場合は大吉、case3と4と5の場合は吉というように、case1とcase2で同じ実行内容にするといったことができるのです。
ちなみに、ミスでcase6のbreakを万が一書き忘れた場合には小吉と吉が表示されてしまいます。
break文の正しい使い方を覚えて、分岐に役立てましょう。
分岐についてはこれで一通り説明し終えました。次は繰り返しのプログラムを説明しようと思うのですが、その前に、
分岐の総復習をしたいと思います。
分岐のプログラム その6 [Java]
分岐のプログラム その5 [Java]
前回はifの条件式()内でequalsを使って、文字列の比較を行うことについて説明しました。
前回までは条件式の部分をさまざまに変化させて説明してきましたが、今回は少し発展させて3つ以上の分岐について説明していきたいと思います。
前回まで説明してきた2つの分岐は、条件が1つあり、それを満たすかどうかでその後の実行結果が2つに分かれるというものでした。
例えば、
眠いなら、「二度寝してください。」、そうでないなら、「おはようございます。」
と表示させるプログラミングですね。
今回説明するのは、簡単にいうと
天気が晴れなら〜、曇りなら・・・、雨なら…
のように実行結果が3つに分岐するプログラミングです。
それでは実際にソースコードをみていきましょう。
public class Main{
public static void main(String[] args){
System.out.println("明日の天気を予報します。");
int tenki=new java.util.Random().nextInt(3)+1;
if(tenki==1){
System.out.println("晴れ");
}else if(tenki==2){
System.out.println("曇り");
}else{
System.out.println("雨");
}
}
}
実行結果
明日の天気を予報します。
(ランダム生成した整数が1なら)
晴れ
(ランダム生成した整数が2なら)曇り
(ランダム生成した整数がそれ以外なら)雨
条件分岐とは関係ありませんが、久しぶりに「整数をランダム生成するコード」と、演算子がでてきました。
まずはそれについて復習していきます。以下のコードです。
int tenki=new java.util.Random().nextInt(3)+1;
このコードの意味は
0~2までのランダムに生成した整数に1を足したものをint型の整数tenkiに代入する
というものです。簡単にいうと、1~3までの整数をランダムで生成するコードです。
(3)の()内にいれる数字によって、ランダムで生成する数字の個数が変化します。
(3)の場合は3個の整数を生成します。
この時注意が必要なのが、生成されるのが1,2,3ではなく0,1,2ということで0から始まるという点です。
そこで、「+1」とすることで、1,2,3のいずれかの整数を生み出したことになるわけです。
では、本題に戻ります。
3つ以上の分岐ですが、基本形をしっかり押さえていればたいして難しく感じないだろうと思います。
基本形
if(条件式){実行結果①
}else{
実行結果②
}
3つ以上の分岐(今回)
if(条件式①){実行結果①
}else if(条件式②){
実行結果②
}else{
実行結果③
}
2つの式を比較して異なっているのは赤い部分だけですね。
条件が3つ4つ・・・と増えていった場合、赤い部分をその分だけ増やせばいいというわけです。
もし条件①を満たせば実行結果①へ、もし条件②を満たせば実行結果②へ、もし条件③を満たせば実行結果③へ、もし条件④を満たせば実行結果④へ、・・・、それ以外の場合は〜。
といった感じですね。
ただ、条件が増えれば増えるほど、コードが長くなり、スッキリしません。
次回は、コードが長くなった時にスッキリとさせるために使う「switch」を使った分岐について説明していきます。
分岐のプログラム その4 [Java]
前回に続きifを使った分岐のプログラムについて説明していきます。
前回までは「==」、「>」、「>=」などの関係演算子や、「&&」、「‖」を使った「かつ」、「または」のプログラムについて説明しました。
今回はifの条件式()内で文字列の比較をするパターンについて説明します。
例えば、何かのサイトにログインする時に、パスワードやIDを忘れてしまった場合、「秘密の質問」の入力を求められることがありますね。
そして、その質問の答えはたいてい文字列です。
前回までは数字の比較でしたが、文字列の比較ではまた違った式を使います。
それが、「equals」です。
例えば、秘密の答えが太郎に等しいというとき
answer.equals("太郎")
というように表現します。
それでは実際にソースコードの例をみていきましょう。
public class Main{
public static void main(String[] args){
System.out.println("秘密の質問の答えを入力してください。");
System.out.println("あなたの犬の名前は何ですか。");
String answer=new java.util.Scanner(System.in).nextLine();
if(answer.equals("ポチ")){
System.out.println("正解です。あなたのパスワードは12345です。");
}else{
System.out.println("違います。");
}
}
}
実行結果
秘密の質問の答えを入力してください。あなたの犬の名前は何ですか。
(「ポチ」なら)
正解です。あなたのパスワードは12345です。
(それ以外なら)違います。
ifの条件式()内は
answer.equals("ポチ")
となっています。
answerは、その前の行でString型の変数として文字入力を受け付けた変数ですね。
今回はこのString型の変数answerがポチと等しいかどうかの比較(=文字列の比較)を行うため、equalsを使っています。
数値の場合は==、文字の場合はequalsです。
次回はもう少し発展して、三つ以上の分岐について説明していきたいと思います。
分岐のプログラム その3 [Java]
前回はいろいろな関係演算子を使ったif分岐のプログラムを説明しました。
今回は条件式をさらに変えてみます。
「または」、「かつ」のパターンについて説明していきたいと思います。
現実世界においても、「または」や「かつ」を使う場合がありますね。
天気が晴れまたは曇りの場合、 外出する。
お腹が空いているかついろいろなものが食べたい場合、バイキングに行く。
などですね。
もう少しプログラミングに近づけた例をあげると、
年齢層が10代または20代の場合、◯◯の宣伝を表示する 。
性別が男性かつスポーツ好きの場合、◯◯に関するニュースを配信する。
などです。
それでは実際にソースコードを見ていきましょう。
public class Main{
public static void main(String[] args){
System.out.println("性別を入力してください。");
int seibetsu=new java.util.Scanner(System.in).nextInt();
System.out.println("1:男性 2:女性");
System.out.println("年齢を入力してください");
int age=new java.util.Scanner(System.in).nextInt();
if(seibetsu==1 && age>=20){
System.out.println("大人の男性諸君、こんにちは");
}else{
System.out.println("こんにちは");
}
}
}
性別、年齢の入力を受け付け、男性かつ20歳以上なら「大人の男性諸君、こんにちは」と表示し、それ以外の場合は「こんにちは」と表示するプログラムです。
ifの条件式()内で「&&」が登場しました。
「&&」は「かつ」という意味です。つまり、性別が男性という条件と、20歳以上という条件の2つを同時に満たしている場合でないと条件を満たしたことにはなりません。
今回のソースコードには登場しませんでしたが、「‖」は「または」という意味です。
仮に、今回のソースコードの&&を‖に変えた場合、性別が男性という条件、または年齢が20歳以上のどちらかいっぽうの条件を満たしている場合、条件を満たしていることになります。
次回はさらに別パターンの例を説明していきます。
分岐のプログラム その2 [Java]
今回も分岐のプログラムについて説明していきます。
前回、ifの条件式()の中に=を書く時は==となることについて説明しました。
今回はその他のパターンについてもみていきたいと思います。
関係演算子には他に「!=」、「>」、「>=」、「<」、「<=」 があります。
「!=」は「≠」のようなもので、等しくないことを表します。
「>」や「>=」は大小比較です。「=」の付いている方は値を比較したときに等しい場合も条件を満たすということです。
3>3は成り立ちませんが、3>=3は成り立ちます。
では、実際にソースコードの例をあげてみていきましょう。
public class Main{
public static void main(String[] args){
int a=2;
int b=3;
System.out.println("2と3の和積の大小比較を行います。);
int wa=a+b;
int seki=a*b;
if(wa>=seki){
System.out.println("和は積以上です。");
}else{
System.out.println("和は積未満です。");
}
}
}
実行結果
2と3の和積の大小比較を行います。和は積未満です。
int型の整数a,bにそれぞれ2,3を代入します。
そして、その和をwa、積をsekiとします。
和と積を比較し、和が積以上なら「和は積以上です。」と表示します。そうでない場合(和は積未満の場合)は、「和は積未満です。」と表示します。
今回は積の方が大きいため、画面上には「和は積未満です。」と表示されます。
このように、条件式の部分にはtrueかfalseを問うもの以外にも大小比較を入れることもできます。
次回もif文による条件分岐について説明します。