こんにちは。ECF Tech ブログ担当 Michiharu.Tです。
Javaプログラミング向け練習問題、今回は制御構文をまとめて出題です。プログラミング初学者には難しい問題もあるかもしれませんが、プログラミング学習にぜひお役立てください。 一般的なJavaの学習順序に沿ったテーマの一覧(※随時追加)は、こちらのリンクよりご確認頂けます。
Javaプログラミング
Javaのトピックスです。主に初心者向けにプログラミング学習ネタを提供していきます。
解説動画
2023/01/21 解説動画を掲載しました。
問題編
Q001
問題
- キーボードで入力された値の階乗を求めるプログラムを記述してください。
 
※最大で10の階乗が求められれば良いこととします。
提供コード
//キーボード入力を使うための準備
import java.util.Scanner;
public class Quiz001 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        //キーボードからの入力を受けとり、nに入れる
        int n = (new Scanner(System.in)).nextInt();
        //ここからプログラムを記述します。
    }
}
実行結果
5を入力した場合
数値を入力してください:5 5! = 120
4を入力した場合
数値を入力してください:4 4! = 24
import java.util.Scanner;
public class Quiz001 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        int n = (new Scanner(System.in)).nextInt();
        int sum = 1;
        for (int i = 1; i <= n; i++) {
            sum *= i;
        }
        System.out.println(n + "! = " + sum);
    }
}
解説
- 入力された値をfor文の終了条件に用います。
 - sumにかけ算の合計値を累積していきます。
 
Q002
問題
- 変数a,bを用い、aのb乗を求めて実行結果のように表示してください。
 
提供コード
public class Quiz002 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        //ここにプログラムを書きます。
    }
}
実行結果
a = 3, b = 4の場合
3の4乗は81です
a = 2, b = 8の場合
2の8乗は256です
import java.util.Scanner;
public class Quiz002 {
    public static void main(String[] args) {
        int a = 2;
        int b = 8;
        int sum = 1;
        for (int i = 0; i < b; i++) {
            sum *= a;
        }
        System.out.println(a + "の" + b + "乗は" + sum + "です");
    }
}
解説
- bの値をfor文の終了条件に用います。
 - sumにかけ算の合計値を累積していきます。
 
Q003
問題
次の仕様に基づいて、プログラムを作成してください。
(仕様)
- キーボードから数値を1つ受け取ります(nとします)。
 - 四角をn個、横並びに表示します。
 - 四角の並びは全部で8段表示し、奇数段は□、偶数段は■を表示します。 ※nの最大値は10個の想定で構いません。
 
提供コード
//キーボード入力を使うための準備
import java.util.Scanner;
public class Quiz003 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        //キーボードより数値を受け取ります。
        int n = (new Scanner(System.in)).nextInt();
        for (int i = 0; i < 8; i++) {
            //ここにプログラムを書きます。
        }
    }
}
実行結果
ケース1
数値を入力してください:5 □□□□□ ■■■■■ □□□□□ ■■■■■ □□□□□ ■■■■■ □□□□□ ■■■■■
ケース2
数値を入力してください:8 □□□□□□□□ ■■■■■■■■ □□□□□□□□ ■■■■■■■■ □□□□□□□□ ■■■■■■■■ □□□□□□□□ ■■■■■■■■
import java.util.Scanner;
public class Quiz003 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        int n = (new Scanner(System.in)).nextInt();
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < n; j++) {
                if (i % 2 == 0) {
                    System.out.print("□");
                } else {
                    System.out.print("■");
                }
            }
            System.out.println();
        }
    }
}
解説
- 段ごとの四角を出す回数は、入力値に依存するためfor文でその数だけ表示します。そのため二重ループとなります。
 - 外側のforループが段を表していますので、iの値の偶奇を判断し四角の種類を変えます。
 
Q004
問題
次の仕様に基づいて、プログラムを作成してください。
(仕様)
- キーボードから数値を1つ受け取ります(nとします)。
 - 四角をn個、横並びに表示します。
 - 四角の並びは全部で8段表示します。
 - 実行結果のように、■と□を格子状に配置してください。 ※nの最大値は10個の想定で構いません。
 
提供コード
//キーボード入力を使うための準備
import java.util.Scanner;
public class Quiz004 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        //キーボードより数値を受け取ります。
        int n = (new Scanner(System.in)).nextInt();
        for (int i = 0; i < 8; i++) {
            //ここにプログラムを書きます。
        }
    }
}
実行結果
ケース1
数値を入力してください:5 □■□■□ ■□■□■ □■□■□ ■□■□■ □■□■□ ■□■□■ □■□■□ ■□■□■
ケース2
数値を入力してください:8 □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□ □■□■□■□■ ■□■□■□■□
import java.util.Scanner;
public class Quiz004 {
    public static void main(String[] args) {
        System.out.print("数値を入力してください:");
        int n = (new Scanner(System.in)).nextInt();
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < n; j++) {
                int wk = i % 2;
                if ((j + wk) % 2 == 0) {
                    System.out.print("□");
                } else {
                    System.out.print("■");
                }
            }
            System.out.println();
        }
    }
}
解説
- Quiz003の応用型ですので、基本的な構成はかわりません。
 - 変数
wkは、奇数段目の時に1、偶数段目の時に0になります。四角の表示を分ける条件式(j + wk) % 2により、奇数段の時は□で始まり、偶数段の時は■で始まります。 
おわりに
いかがでしたでしょうか。ポイントになる解説を記載しておりますが、二重ループやネストを伴うプログラムは丁寧にプログラムの流れを追いかける地道な理解も求められます。たくさんのプログラムを書いてぜひ、モノにしてみてください。ひきつづき単元ごとに問題を徐々に増やしていきたいと思っていますので、よろしければぜひご活用ください。[PR]
Javaをもっと詳しく学びたい!という方には、下の書籍がおススメです!筆者も愛用しています。

スッキリわかるJava入門 第4版 (スッキリわかる入門シリーズ)
「なぜ」「どうして」が必ずわかる秘密は、3つのコンセプトにあり! プログラミング学習最初の難関「開発環境の準備」でつまずかないよう、スマホやPCのWebブラウザでプログラミングができる ※を用意しています。 プログラミング中によく起きるトラ...


