石田修二 > コンピュータメモ > Java >    (サイト内検索

条件分岐と繰り返し

if文

if文とは(if文の基本)

基本的にはC言語とほぼ同じです。

if (i < 10){
	真の時の処理;
} else {
	偽の時の処理;
}

この場合,i が 10未満であれば,真の時の処理が実行されます。一方,条件式が満たされないのであれば,偽の処理が実行されます。

では,次に

public class IfSample01 {
	public static void main(String[] args) {
		int a = 5;  // 値を変えてみる

		if(a % 2 == 0)
			System.out.println(a + "は偶数です。");
		else
			System.out.println(a + "は奇数です。");
	}
}

5÷2の余りは1なので,else以下の処理が実行されます。

public class IfSample02 {
	public static void main(String[] args) {
		int s = 65; // 値を変えてみます

		System.out.println("あなたの点数は" + s + "点です。");

		if(s < 70) {
			System.out.println("平均まであと" + (70-s) + "点");
			System.out.println("がんばりましょう!");
		} else {
			System.out.println("よくできました!");
		}
	}
}

if文の連続

また,条件が複雑になってくると,if文を複数組み合わせる必要が出てきます。その時は else if が利用されます。最初の条件が成立しなかった時,更に別の条件で動作を分けたい時に利用されます。

if (i < 10){
	i < 10 の時の処理;
} else if(i > 20){
	i > 20 の時の処理;
} else {
	それ以外の時の処理;
}

この例では、i が10以上であった時、更に i が20より大きい時と、そうでない時とで2つに分けた処理を行うようになっています。

もう1つサンプルプログラムを示します。

class If01 {
	public static void main(String[] args) {
		// 変数の宣言と初期化
		int i = 5;

		// i の値によって,表示する文字を変える
		if ( i==5 ) {
			System.out.println("i=5です。");
		} else if( i==6 ) {
			System.out.println("i=6です。");
		} else if( i>5 ) {
			System.out.println("iは5より大きいです。");
		} else {
			System.out.println("iは5, 6以外で5以下です。");
		}
		System.out.println("終了");
	}
}

int i = 5 の部分で5という数字をいろいろと変えてみて,(コンパイル後に)結果を確認してみましょう。

if = else 文を使って,キーボードから数字を入力させ,入力された値によって表示するメッセージを着分けるプログラムを紹介します。

import java.io.*;
public class IfTest {
	public static void main(String[] args) throws IOException {
		BufferedReader bufRd = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("1桁の数字を半角で入力して下さい");
		String str = bufRd.readLine();
		int num = Integer.parseInt(str);
		
		if (num < 5){
			System.out.println("5より小さな数字です");
		} else {
			System.out.println("5以上の数字です");
		}
	}
}

int num = Integer.parseInt(str) に注目して下さい。ここで,「文字列」として受け取った値を,int型の数値に変換する処理を行っています。

キーボードから読み取った値は,文字列型データになっています。文字列のままでは数値としての大小を比較することはできませんので,これをいったん何らかの数値型のデータに変えてやらなくてはならないのです。

ここでは Integer というプログラム部品の parseInt という機能を使って,この変換処理を行っています。

文字列を数値に変換する処理としてはお決まりのコードというので覚えておきましょう。

switch文

ある変数がいくつかの決まった値をとる時は、その値によって動作を分けたい、ということがあります。そのような時に利用するのがswitch文です。

switch文では、注目する変数の値を指定し、その値がいくつなのか、によってそれぞれ case のところと一致した部分のみ実行されます。

switch (i){
	case 1;
		i = 1 の時に実行する処理;
		break;
	case 2;
		i = 2 の時に実行する処理;
		break;
	default;
		どれでもない時に実行する処理;
}

ここの例の場合ですと、i が1の時と、2の時に、それぞれ別々の処理が実行されることになります。

この時、処理の内容は複数行書いてもかまいませんが、その終わりは、明示的に示す必要があります。それが、break 文です。もし、このbreak文を書かないと、実行は次の行以下にも続いてしまうため、i が1の時に、case 1のところの文を実行していき、そのままcase 2のところの文まで実行してしまう、ということになりますのでbreak文は忘れないようにしてください。

また、i の値が1でも2でもない時は,defaultの部分が実行されます。

if文で書いてみる

if (i == 1){
	i = 1 の時の処理;
} else if(i == 2){
	i = 2 の時の処理;
} else {
	それ以外の時の処理;
}

次の例は,キーボードから1桁の数字を入力してもらい,その結果によって異なるメッセージを表示させるプログラムです。

import java.io.*;
public class SwitchTest {
	public static void main(String[] args) throws IOException {
		
		BufferedReader bufRd = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("1から3までの数字を半角で入力して下さい");
		
		String str = bufRd.readLine();
		int x = Integer.parseInt(str);
		
		switch(x) {
		case 1:
			System.out.println("xは1です");
			break;
		case 2:
			System.out.println("xは2です");
			break;
		case 3:
			System.out.println("xは3です");
			break;
		default:
			System.out.println("1から3までって言ったのに!");
		}
	}
}

繰り返し

Hello World!というメッセージを10回繰り返して表示するプログラムです。

for文

import java.io.*;
public class ForTest {
	public static void main(String[] args) throws IOException {
		for (int i = 0; i < 10; i++){
			System.out.println("Hello World!");
		}
	}
}

次のように,カウンタ変数を処理に利用するケースもよくあります。

import java.io.*;
public class ForTest {
	public static void main(String[] args) throws IOException {
		for (int i = 0; i < 10; i++){
			System.out.println((i+1) + "回目のHello World!");
		}
	}
}

どちらも同じ挙動

for (i = 0; i < 10; i++){
	何かの処理;
}

while文

i = 0;
while (i < 10){
	何かの処理;
	i++;
}

分岐しながら繰り返す

以下は、1から10までの数と、その数が奇数であるか偶数であるかを合わせて画面に出力するプログラムです。

public class ForIfTest {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++){
			if (i % 2 == 0){
				System.out.println(i + " は偶数です");
			} else {
				System.out.println(i + " は奇数です");
			}
		}
	}
}

繰り返し回数のわからないループ

繰り返し回数がわからない時,例えば,学生の人数が可変など。こういった時には終了条件が書けない。

こういった場合は,人数を仮定しないプログラムを書く。無限ループと呼ばれます。

といっても、本当にループし続けるとプログラムが 一生終わらなくなってしまいますので、 入力された値や、計算された値等によって、 別途終わるべき時を判断し、 その時に終了するようなプログラムを書きます。

while (true){
	何らかの処理;
	if(終了条件){
		break;

テスト結果の集計のプログラム

キーボードからテスト結果を入力,人数は10人で固定

結果を集計して表示。平均点,合格者数(60点以上は合格)と合格率

まずは10人分の点数を、キーボードからScannerを使って読みとります(参考:データの入出力)。

その後、結果を集計して表示してください。表示すべき値はふたつあり、ひとつは全体の平均点、もうひとつは、60点以上を合格とした時の、合格率です。

平均点は、全員の点数を合計していき、最後に人数で割れば計算できます。

合格率は、点数が60点以上であった人数を数えておき、最後に10人で割れば、計算できます。

import java.util.Scanner;
class TestScore1{
	public static void main(String[] args){
		int i, score, sum = 0, passed = 0, total = 10;
		Scanner scan = new Scanner(System.in);

		for (i=0;i= 60){
				passed++;
			}
		}
		double average = (double)sum / total;
		System.out.printf("平均点:%.1f\n", average);
		System.out.printf("合格者数:%d人,合格率:%.1f%%\n", passed, (double)passed / total * 100);
	}
}

解説

 sum = 0, passed = 0

平均点を計算するための合計点を覚えておく変数 sum ,60点以上で合格した人数を覚えておく変数 passed を準備し,それぞれ 0 で初期化しておきます。

次に,10人分の点数を入力し,読み取るためのループを作ります。

		for (i=0;i= 60){
				passed++;
			}
		}

score = scan.nextInt(); sum = sum + score; の部分で,Scanner を利用して点数をひとつ読み取っています。その後,sum に加算して,合計点数を計算しています。

さらに,以下の部分で読み取った点数が60点以上なら合格ですから,合格者の人数をひとり増やします。

if(score >= 60){
				passed++;
			}

こうして10人分の点数を読み取ったら,次に平均点を計算します。小数点以下まで計算するので,実数型(double)に変換してから計算している点に注意しましょう。

double average = (double)sum / total;

最後に,(double)passed / total * 100 で合格率を計算しています。

なお,ここでは,計算結果を変数に代入することなく,直接表示させています。


リンクはご自由にどうぞ。

【石田修二トップページ】  【コンピュータメモ】 【Java】

Last modified: 2017-03-02 01:02:31