ホーム
Java
その他
こんなサイト腐るほどあるのになんでうちに来たの?
来たからには、ちゃんとJavaをマスターしてもらうからね。
2018/01/27

第5回 条件分岐と繰り返しをマスターしよう


前回は、単純なプログラムを作ってみたけど、今回はもうちょっと本格的なものを作っていこうと思う。

それにあたって、条件分岐ってのと繰り返し文ってのを覚える必要がある。
まずは条件分岐。
もし〜ならば実行ってやつです。
「もし」は英語で「if」だから、イフ文って言います。

んで、条件式には左右を比較する演算子がよく使われる。
じゃあひとつ例文

int a = 5;
int b = 10;
if(a < b){
tab System.out.println("aよりbのほうが大きいです");
}
if(a * 2 == b){
tab System.out.println("aを2倍するとbと等しくなります。");
} else {
tab System.out.println("aの2倍とbは等しくありません。");
}

使い方は大体こんな感じになります。

一応説明しとくと、if(a < b){ ... }ってのが、「もしa < bが真ならば」ってことだ。
まあ見たまんまだから大丈夫だよな?

次に、elseについてだ。
ifに対して、違った場合にelseの内容が実行される。

だから上記の場合だと、最初にif(a * 2 == b)が判断されて、これが正なら{}の内容を実行。偽だったら、実行せずに次のelseに移る。
また、こんな書き方もできる。

int i = 5;
if(i > 5){
tab //iが5より大きい場合の処理
} else if(i < 5){
tab //iが5未満の場合の処理
} else {
tab //どちらでもない場合の処理
}


if文はこんな感じでとても簡単。
次は繰返し文だな。
これは2つの方法を紹介する。
まず、while文だ。
書き方はifと同じ。
while(条件式){ 繰り返す内容 }ってかんじになる。
あと、do-whileとかいうのもあるけど今回は割愛、気になる人は後で調べておきな。
俺は今までそれを使う機会はなかったが。

さあ、まずは例文だ。

int i = 0;
while(i < 10){

tab System.out.println("a");
tab i ++;
}


これは、コンソールにaを10回表示するだけの意味不明なプログラムだ。
まず、iという変数を宣言して0で初期化する。
次、whileのカッコの中に、1 < 10と書いてある。
つまり、i < 10が真のとき繰り返すってことだ。
繰り返しの中でaを表示して、そのあとiを1ずつ足しているから、iが10になったとき1 < 10が偽になって繰り返しが終わるって仕組みだ。

で、これをもっとスマートに書く方法ってのがもうひとつの繰り返し文のfor文ってやつで、ちょっと慣れるまでは書き間違いがあったりするかもしれないけど、とりあえず一度覚えておこう。
これは結構使うから。
書き方はちょっと特殊で、for(変数の宣言; 条件式; 毎回行う動作){ ... }ってかんじになる。
では例文。

for(int i = 0; i < 10; i ++){

tab System.out.println("a");
}

これは、先に書いたwhile文と同じ動作をする。
俺はwhileよりforの方が使う頻度高いかな。
回数を指定して繰り返し処理を行いたいときによく使います。

じゃあ今回も、実際になにか作ってみよう。

今回作るアプリは、2つの入力された数の最小公倍数を求めるものだ。
とりあえず、忘れているといけないから最小公倍数のおさらいだ。
最小公倍数は、2つ以上の数の倍数で共通の数のうち最小のものです。

計算方法は何通りかあるけど、プログラミングの練習のために今回はかなり古典的?で地道な作業をさせてみます。
処理の流れは、
1. ふたつの数字を入力してもらう。
2. 大きい方の数字を2倍,3倍,4倍ってしていって、それぞれを小さい方の数字で割って割り切れたらそれが最小公倍数
3. 最小公倍数をコンソールに出力してプログラム終了。

じゃあ書いてみよう。

import java.io.*;

class TLCM{

public static void main(String[] args) throws IOException{

System.out.println("1つめの数を入力してください。");
int a = Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());

System.out.println("2つめの数を入力してください。");
int b = Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());

int bigger = 0;
int smaller = 0;
if(a > b){

bigger = a;
smaller = b;
} else if(a < b){

bigger = b;
smaller = a;
} else if(a == b){

System.out.println("最小公倍数は" + a + "です。");
}

if(smaller > 0){

int i = 1;
while(true){

i ++;
if(bigger * i % smaller == 0){

System.out.println("最小公倍数は" + (bigger * i) + "です。");
break;
}
}
}
}
}


ちょっと長くなったけど、理解できるかな?
はじめに2つの数字を入力してもらって、int aとbに入れておく。
それをif(a > b)でどちらが大きいか判断して、大きい方の数をint boggerに、小さい方をsmallerに入れる。
aとbが同じなら、最小公倍数はその数だからそれを出力する。
本当はこのあたりで、入力された値が0以下だった場合の処理とかも書いておくべきなんだけど、面倒だったから今回はパス。
小さい方の数字が0より大きいなら、最小公倍数を求めるwhile文を実行。
while(true)ってのは、終わりなくずっとループさせるってこと。
言い忘れたけど、trueが真でfalseが偽ね。
ループの中で、大きい方を2倍、3倍ってしていく。
これを、bigger * iって書いてるね。
で、それを小さい方の数で割る。
割った余りが0ならばbigger * iが最小公倍数だってことで、それを出力する。
bigger * i % smallerってので、bigger * iをsmallerで割った余りを求めることができる。
割り切れれば余りは0だから、 == 0で判断。

求めた最小公倍数を出力したあとでbreakって書いてあるのが、繰り返し文を途中で抜けるためのおまじない
for文でも使える。
これでwhileのループを抜け出してプログラムは終了となる。

じゃあこれをコンパイルして実行してみよう。

今回わからないことがあったら、今のうちにググって解決しておくように。

では次回、配列の勉強をしよう。
多分すぐ終わる。