Java基本構文と制御構造 課題集 (全30問)

2025-08-01

初級問題 (9問)

基本構文とデータ型

  1. 変数の宣言と代入: int型の変数ageを宣言し、値25を代入してください。
  2. 文字列の結合: 文字列変数firstNameに”山田”、lastNameに”太郎”を代入し、結合して表示してください。
  3. 基本データ型: byte型の変数を宣言し、適切な値を代入してください。
  4. 定数の宣言: finalを使って円周率(3.14159)を定数として宣言してください。
  5. 型変換: double型の変数price(値は1980.0)をint型に変換してください。
  6. 演算子: 2つの整数(15と4)に対して、加算、減算、乗算、除算、剰余演算を行ってください。
  7. 文字列から数値へ: 文字列”123″をint型に変換してください。
  8. 数値から文字列へ: int型の数値456をString型に変換してください。
  9. コメント: 単一行コメントと複数行コメントの例を書いてください。

中級問題 (15問)

制御構造

  1. if文: 変数scoreが60以上なら”合格”、そうでなければ”不合格”と表示するプログラムを作成してください。
  2. if-else if: 変数temperatureの値に応じて、0未満なら”寒冷”、0以上10未満なら”冷涼”、10以上20未満なら”温暖”、20以上なら”暑熱”と表示してください。
  3. switch文: 変数month(1-12)の値に応じて季節を表示してください(例:12-2月は冬)。
  4. forループ: 1から10までの整数を表示するプログラムを作成してください。
  5. whileループ: 1から100までの偶数のみを表示するプログラムを作成してください。
  6. do-whileループ: ユーザーに1から10の数値を入力させ、正しい値が入力されるまで繰り返すプログラムを作成してください。
  7. ネストしたforループ: 九九表を表示するプログラムを作成してください。
  8. break文: 1から100までの数を表示し、50に達したらループを終了するプログラムを作成してください。
  9. continue文: 1から100までの数で、3の倍数だけを表示するプログラムを作成してください。
  10. ラベル付きbreak: 二重ループを使用し、外側のループをラベル付きbreakで終了させる例を作成してください。

配列と制御構造

  1. 配列とforループ: 配列{1,3,5,7,9}の要素をすべて表示するプログラムを作成してください。
  2. 配列とfor-each: 前問の配列をfor-eachループで処理してください。
  3. 配列の合計: 配列内の数値の合計を計算するプログラムを作成してください。
  4. 配列の最大値: 配列内の最大値を探すプログラムを作成してください。
  5. 二次元配列: 3×3の二次元配列を作成し、すべての要素を表示するプログラムを作成してください。

上級問題 (6問)

  1. メソッドの作成: 2つの整数を受け取り、その和を返すメソッドを作成してください。
  2. 再帰処理: 階乗を計算する再帰的メソッドを作成してください。
  3. 例外処理: ゼロ除算が発生する可能性のあるコードを書き、例外処理を行ってください。
  4. 文字列操作: 文字列が回文(前後同じ)かどうかを判定するプログラムを作成してください。
  5. 素数判定: 与えられた数が素数かどうかを判定するプログラムを作成してください。
  6. フィボナッチ数列: 指定された項数までのフィボナッチ数列を表示するプログラムを作成してください。

解答例

初級問題の解答

  1. 変数の宣言と代入
   int age = 25;
  1. 文字列の結合
   String firstName = "山田";
   String lastName = "太郎";
   System.out.println(firstName + lastName);
  1. 基本データ型の代入
   byte smallNumber = 100;
  1. 定数の宣言
   final double PI = 3.14159;
  1. 型変換(キャスト)
   double price = 1980.0;
   int intPrice = (int)price;
  1. 演算子
   int a = 15, b = 4;
   System.out.println(a + b); // 19
   System.out.println(a - b); // 11
   System.out.println(a * b); // 60
   System.out.println(a / b); // 3
   System.out.println(a % b); // 3
  1. 文字列から数値へ
   String str = "123";
   int num = Integer.parseInt(str);
  1. 数値から文字列へ
   int num = 456;
   String str = Integer.toString(num);
   // または String str = "" + num;
  1. コメントアウト
   java // これは単一行コメントです /* これは 複数行コメントです */

中級問題の解答

  1. if文
int score = 75;
if (score >= 60) {
    System.out.println("合格");
} else {
    System.out.println("不合格");
}
  1. if-else if文
int temperature = 15;
if (temperature < 0) {
    System.out.println("寒冷");
} else if (temperature < 10) {
    System.out.println("冷涼");
} else if (temperature < 20) {
    System.out.println("温暖");
} else {
    System.out.println("暑熱");
}
  1. switch文
int month = 5;
switch (month) {
    case 12: case 1: case 2:
        System.out.println("冬"); break;
    case 3: case 4: case 5:
        System.out.println("春"); break;
    case 6: case 7: case 8:
        System.out.println("夏"); break;
    case 9: case 10: case 11:
        System.out.println("秋"); break;
    default:
        System.out.println("無効な月");
}
  1. forループ
for (int i = 1; i <= 10; i++) {
    System.out.println(i);
}
  1. whileループ
int i = 1;
while (i <= 100) {
    if (i % 2 == 0) {
        System.out.println(i);
    }
    i++;
}
  1. do-whileループ
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
int input;
do {
    System.out.print("1から10の数値を入力してください: ");
    input = scanner.nextInt();
} while (input < 1 || input > 10);
  1. ネストしたforループ
for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= 9; j++) {
        System.out.print(i * j + "\t");
    }
    System.out.println();
}
  1. break文
for (int i = 1; i <= 100; i++) {
    System.out.println(i);
    if (i == 50) {
        break;
    }
}
  1. continue文
for (int i = 1; i <= 100; i++) {
    if (i % 3 != 0) {
        continue;
    }
    System.out.println(i);
}
  1. ラベル付きbreak
outerLoop:
for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= 5; j++) {
        System.out.println(i + "," + j);
        if (i == 3 && j == 3) {
            break outerLoop;
        }
    }
}
  1. 配列とforループ
int[] numbers = {1, 3, 5, 7, 9};
for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}
  1. 配列とfor-each
int[] numbers = {1, 3, 5, 7, 9};
for (int num : numbers) {
    System.out.println(num);
}
  1. 配列の合計
int[] numbers = {1, 3, 5, 7, 9};
int sum = 0;
for (int num : numbers) {
    sum += num;
}
System.out.println("合計: " + sum);
  1. 配列の最大値
int[] numbers = {1, 3, 5, 7, 9};
int max = numbers[0];
for (int i = 1; i < numbers.length; i++) {
    if (numbers[i] > max) {
        max = numbers[i];
    }
}
System.out.println("最大値: " + max);
  1. 二次元配列
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

上級問題の解答

  1. メソッドの作成
public static int addNumbers(int a, int b) {
    return a + b;
}
  1. 再帰処理
public static int factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    return n * factorial(n - 1);
}
  1. 例外処理
try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("ゼロ除算が発生しました");
}
  1. 文字列操作
public static boolean isPalindrome(String str) {
    int left = 0;
    int right = str.length() - 1;
    while (left < right) {
        if (str.charAt(left) != str.charAt(right)) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}
  1. 素数判定
public static boolean isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    for (int i = 2; i <= Math.sqrt(num); i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}
  1. フィボナッチ数列
public static void printFibonacci(int count) {
    int n1 = 0, n2 = 1, n3;
    System.out.print(n1 + " " + n2);
    for (int i = 2; i < count; i++) {
        n3 = n1 + n2;
        System.out.print(" " + n3);
        n1 = n2;
        n2 = n3;
    }
}