ゼロからプログラミングコンテスト!

プログラミング経験ゼロから、プログラミングコンテストに挑戦できるよう、応援するブログです。実践が一番!

真偽値とif文について

さて、ついに『if文』について説明します。

『if文』とは『条件分岐』とか言われるものです。これは、プログラムがただの電卓より強い理由の1つとなるものです。
大事なので、頑張って習得しましょう。

一番シンプルな『if文』の形

さて、まずは『if文』を使ったプログラムを読んでみましょう。
入力や出力、そして変数の知識が必要です。自信のない方は過去の記事で復習してみて下さい。

はい、今回読む1つ目のプログラムはコチラ。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力の数字を一つ、nに入れる

		if(n == 3){
			System.out.println("n is 3 !");
		}

	}
}

とりあえずはAtCoderのコードテスト上で実行してみましょう。
まずは、入力を3にしてやってみて下さい。そうすると、

n is 3!

と出力されますね。また、入力を3以外の数字(5や1198など)にしたら、何も出力されません。

では、内容の説明です。『if文』は、次のような書き方をします。

if(条件){
条件が『真』だったときに実行すること;
}

条件が『真』である、という表現は少し分かりにくいですかね。これは、条件に書いてあることが正しかったら、という言い方に変えてもよいと思います。
上の例ではこのif文は

		if(n == 3){
			System.out.println("n is 3 !");
		}

と書いてありますね。

==

というのは、『この==の右と左の数値は等しいか?』という質問を表します。
『=』が2つ重ねるとそのような意味を持ちます。1つにしか書かないというミスがよくあるので、注意して下さい。
というわけで、

n == 3

と書くと、『nは3に等しいか?』という質問になります。
これはもちろんですが、nが3の時に『真(=正しい)』です(それ以外は正しくないですね。そういうときは『真』に対して『偽』と言います)。

そして正しいときに実行される部分には、

System.out.println("n is 3 !");

と書いてあります。というわけで、上のif文の部分は、
nが3の時は"n is 3 !"と表示される
という意味になります。

では、ここから色々変更して理解を深めてみましょう。
まずは、条件のところ(n == 3のところ)を変えてみましょう。
次のように変更します。

n > 3

つまり全体では、次のようなコードになります。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力の数字を一つ、nに入れる

		if(n > 3){  //もしnが3より大きかったら
			System.out.println("n is bigger than 3 !"); //これを表示
		}

	}
}

入力を色々変えてやってみましょう。とりあえず、入力を7、3、1に変えて実行してください。
入力が7の時は"number is bigger than 3!"と表示されて、3、1のときは何も出力されないですね。

n > 3

というのは、
nが3より大きいか?
という質問になります。
ちなみに、nが3のときは、これは『偽』になります。
nが3のときも『真』と判定して欲しいとき、つまり『nが3以上』のときに『真』と判定して欲しいときは次のように書きます。

n >= 3

『=>』と書くミスがよくあります。注意しましょう。僕は、
日本語で『だいなりイコール』とか読むから、記号もこの順で書く
と覚えています。
同じように使える、他の書き方と、どういうときに『真』と判定されるのかを紹介します。

a < 3  //aが3より小さいとき
a <= 3  //aが3以下のとき
a != 3   //aが3でないとき

というわけで、ここで練習問題です。

☆練習問題1.入力が3でないときに"number is not 3!"と出力し、それ以外の時は何も出力しないプログラムを書いて下さい。また、AtCoder上で色々な入力で試し、実際に合っているか確かめて下さい。

『else』も使ってみる

覚えると便利な、『else』について説明します。
文法的な説明からすると、次のようになります。

if(条件){
条件が『真』だったときに実行すること;
}else{
条件が『偽』だったときに実行すること;
}

さて、これを参考に、この記事の一番最初で見たコードを変更した、下のコードを見て下さい。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力の数字を一つ、nに入れる

		if(n == 3){
			System.out.println("n is 3 !");
		}else{
			System.out.println("n is not 3 !");
		}
	}
}

これを入力を色々変えて試してみて下さい。3と3以外の数字は試しましょう。
入力が3のときは"n is 3!"、それ以外の時は"n is not 3!"と出ます。
上の文法通りの実行になっていますね。

また、ifのあとの{}内には、複数の実行文を書くことができます。たとえば、次のプログラムを見て下さい。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力の数字を一つ、nに入れる

		if(n > 10){
			System.out.println("number is big !");
			System.out.println("Yeah!");
		}else{
			System.out.println("n is not 3 !");
		}
	}
}

これを実行すると、入力として10より大きい数字だと、

number is big!
Yeah!

と出ますね。このように、複数の実行文も可能です。

実行文にprint以外の文を入れてみよう

もちろん、これまでのように入力に応じてなにか決まった文を出力を出すだけでは面白くありません。
ためしに、次のようなコードを考えてみましょう。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力の数字を一つ、nに入れる

		if(n > 10){
			n *= 2;
		}
		System.out.println(n);
	}
}

これは、nが10以上の時、nを2倍にする文が実行されますね。
よって、入力が10以上のときには最後のprintlnが実行される前にnが2倍となり、出力もその2倍した数値になります。
入力と出力の対応は、

3 →3
7 →7
12→24

になりますね。

もちろん、else文を使うと、もっと複雑なコードが書けます。

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt(); //nという変数を作り、標準入力の数字を一つ、nに入れる

		if(n >= 10){
			n *= 2;
		}else{
			n -= 3;
		}
		System.out.println(n);
	}
}

これは、『入力が10以上のときは2倍したものを、10未満のときは3を引いたものを出力する』というコードです。
AtCoderで入力を色々変えて試してみて下さい。

というわけで、最後の練習問題です。
☆練習問題2.入力が5以上のときはそれを2増やした数を、5未満のときは3増やした数を出力するプログラムを書き、AtCoderで実行して確認して下さい。


今回はここまでです。
次は、もう少し複雑なif文の話をしようと思います。
また、実際にAtCoderの問題を解いて、解答コードを提出するのもやってみます。