実践:基礎
このレッスンはPhase 1のハンズオン実践で、4つのプロジェクトを通じて学んだことを定着させます。
プロジェクト1:九九の表
使用スキル:forループ、ネストされたループ、フォーマット出力。
要件
完全な九九の表(1-9)を表示します。
実装
JAVA
public class MultiplicationTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.printf("%d×%d=%-4d", j, i, i * j);
}
System.out.println();
}
}
}
出力
TEXT
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
主要な概念
- ネストされたforループ
System.out.printf()によるフォーマット出力%-4dは左揃え、4文字分のスペース
プロジェクト2:バブルソート
使用スキル:配列、ネストされたループ、変数の交換。
要件
配列を昇順にソートします。
実装
JAVA
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("ソート前: " + Arrays.toString(arr));
// バブルソート
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交換
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("ソート後: " + Arrays.toString(arr));
}
}
出力
TEXT
ソート前: [64, 34, 25, 12, 22, 11, 90]
ソート後: [11, 12, 22, 25, 34, 64, 90]
主要な概念
- 配列の走査と要素の交換
- ネストされたループの制御
Arrays.toString()で配列を表示
プロジェクト3:数当てゲーム
使用スキル:Random、Scanner入力、whileループ、条件ロジック。
要件
プログラムが1-100のランダムな数値を生成し、ユーザーが推測し、プログラムが「大きすぎます」「小さすぎます」「正解」と応答します。
実装
JAVA
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Random random = new Random();
Scanner scanner = new Scanner(System.in);
int target = random.nextInt(100) + 1;
int guess = 0;
int attempts = 0;
System.out.println("=== 数当てゲーム ===");
System.out.println("1-100の数字を考えています。推測してください!");
while (guess != target) {
System.out.print("推測を入力: ");
guess = scanner.nextInt();
attempts++;
if (guess > target) {
System.out.println("大きすぎます!もう一度試してください。");
} else if (guess < target) {
System.out.println("小さすぎます!もう一度試してください。");
} else {
System.out.println("おめでとうございます!答えは " + target + " です");
System.out.println(attempts + " 回で推測しました");
}
}
scanner.close();
}
}
出力例
TEXT
=== 数当てゲーム ===
1-100の数字を考えています。推測してください!
推測を入力: 50
大きすぎます!もう一度試してください。
推測を入力: 25
小さすぎます!もう一度試してください。
推測を入力: 37
大きすぎます!もう一度試してください。
推測を入力: 31
おめでとうございます!答えは 31 です
4 回で推測しました
主要な概念
Random.nextInt()でランダム数値を生成Scanner.nextInt()でユーザー入力を取得- whileループで繰り返し推測
- if-else if-elseで複数の条件を判断
プロジェクト4:簡単な電卓
使用スキル:Scanner入力、switch文、算術演算。
要件
ユーザーが2つの数値と演算子を入力し、プログラムが計算して結果を表示します。
実装
JAVA
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("=== 簡単な電卓 ===");
System.out.print("最初の数値を入力: ");
double num1 = scanner.nextDouble();
System.out.print("演算子を入力(+ - * /): ");
char operator = scanner.next().charAt(0);
System.out.print("2番目の数値を入力: ");
double num2 = scanner.nextDouble();
double result = 0;
boolean valid = true;
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
System.out.println("エラー:ゼロで割ることはできません");
valid = false;
}
break;
default:
System.out.println("エラー:サポートされていない演算子 '" + operator + "'");
valid = false;
}
if (valid) {
System.out.printf("%.2f %c %.2f = %.2f%n", num1, operator, num2, result);
}
scanner.close();
}
}
出力例
TEXT
=== 簡単な電卓 ===
最初の数値を入力: 10
演算子を入力(+ - * /): *
2番目の数値を入力: 5
10.00 * 5.00 = 50.00
主要な概念
scanner.next().charAt(0)で単一文字を読み取る- switch文で複数の演算を処理
System.out.printf()でフォーマット出力- ゼロ除算のチェック
追加演習
演習1:成績統計
10個の成績を入力し、平均値、最高値、最低値を計算します。
JAVA
import java.util.Scanner;
import java.util.Arrays;
public class ScoreStats {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] scores = new int[10];
// 成績を入力
for (int i = 0; i < scores.length; i++) {
System.out.print((i + 1) + "番目の成績を入力: ");
scores[i] = scanner.nextInt();
}
// 統計を計算
int sum = 0, max = scores[0], min = scores[0];
for (int score : scores) {
sum += score;
if (score > max) max = score;
if (score < min) min = score;
}
double avg = (double) sum / scores.length;
// 結果を表示
System.out.println("\n=== 統計 ===");
System.out.println("成績: " + Arrays.toString(scores));
System.out.printf("平均値: %.1f%n", avg);
System.out.println("最高値: " + max);
System.out.println("最低値: " + min);
scanner.close();
}
}
❓ よくある質問
Q プロジェクトが思いつかない場合はどうすればいいですか?
A まず要件を分析し、ロジックを考えてから、コードを参照してください。コピーするだけではなく、各行が何をしているかを理解してください。
Q コードは実行できますが、結果が間違っている場合は?
A System.out.println()で中間変数を出力し、計算の各ステップを確認してください。
Q プログラミングスキルを向上させるにはどうすればいいですか?
A もっと練習してください。簡単なプロジェクトから始めて、徐々に難易度を上げてください。
📖 まとめ
- 九九の表:ネストされたループ + フォーマット出力
- バブルソート:配列 + ネストされたループ + 要素の交換
- 数当てゲーム:Random + Scanner + whileループ
- 簡単な電卓:Scanner + switch + 算術演算
📝 演習
- 電卓の改良: 剰余演算を追加し、連続計算をサポート
- 配列操作: 10個の数値を入力し、素数を見つける
- 数当てゲームの改良: 推測回数を7回に制限し、推測履歴を表示
次のレッスン
次のレッスンでは、Phase 2に移り、メソッドの基礎を学びます — メソッドの定義と使用方法を学びます。



