この初級編7日間プランの全体像
この「1 日 120 分 × 7 日・初級編」は、あなたがすでに
mainメソッド- 変数・if・for
- メソッド
- 配列
など「超初級」で触った前提で、そこから一段階レベルを上げるためのコースです。
目標は「1 ファイルに全部書く人」から卒業して、
- 自分でクラスを定義できるようになる
- オブジェクト指向の入口に立つ
- コレクション(
ArrayList)で柔軟にデータを扱える - 小さなコンソールアプリを「設計して」作れる
ところまで行くことです。
1 日 120 分は、前半 60 分で読んで理解、後半 60 分で「自分の手で書いて動かす」イメージで進めてください。
1 日目:Scanner で入力を受け取る「対話型プログラム」の基礎
コンソール入力の基本(Scanner)
超初級では、値をコードの中に直接書き込んでいました。
初級では「ユーザーが入力した値を使う」プログラムに進みます。
そのために使うのが java.util.Scanner クラスです。
次のコードを書いて、数字を入力してみてください。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("あなたの名前を入力してください: ");
String name = scanner.nextLine();
System.out.print("あなたの年齢を入力してください: ");
int age = scanner.nextInt();
System.out.println("こんにちは、" + name + "さん(" + age + "歳)");
}
}
Javaここで重要なポイントを深掘りします。
1.import java.util.Scanner;
Scanner クラスを使うには、この一行が必要です。java.util というパッケージの中に Scanner がある、という意味です。
2.Scanner scanner = new Scanner(System.in);new は「新しいオブジェクトを作る」キーワードです。System.in は「キーボード入力」を表す特別なオブジェクト。
それを受け取って、scanner という名前の「入力の道具」を作っています。
3.nextLine() と nextInt()nextLine() は 1 行分の文字列を読む。nextInt() は整数を読む。
型が違うので、用途によって使い分けます。
入力と if・計算を組み合わせる
簡単な「BMI もどき」として、身長と体重から「軽め〜重め」を判断する例です。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("身長(cm) を入力してください: ");
double heightCm = scanner.nextDouble();
System.out.print("体重(kg) を入力してください: ");
double weight = scanner.nextDouble();
double heightM = heightCm / 100.0;
double bmi = weight / (heightM * heightM);
System.out.println("あなたのBMIは " + bmi + " です。");
if (bmi < 18.5) {
System.out.println("少しやせ気味かもしれません。");
} else if (bmi < 25) {
System.out.println("標準的な範囲です。");
} else {
System.out.println("少し重めかもしれません。");
}
}
}
Javaここでは Scanner と if、数値計算をセットで使っています。
「入力 → 計算 → 条件分岐 → 結果表示」の流れを意識してください。
2 日目:メソッドをもう一段深く(オーバーロードと分割)
メソッドで「まとまり」をはっきりさせる
昨日の BMI プログラムは、全部 main に書いても動きますが、
読みやすく・変更しやすくするために、処理をメソッドに分けていきます。
次のように分割してみましょう。
import java.util.Scanner;
public class Main {
public static double calculateBmi(double heightCm, double weight) {
double heightM = heightCm / 100.0;
return weight / (heightM * heightM);
}
public static String judgeBmi(double bmi) {
if (bmi < 18.5) {
return "少しやせ気味かもしれません。";
} else if (bmi < 25) {
return "標準的な範囲です。";
} else {
return "少し重めかもしれません。";
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("身長(cm): ");
double height = scanner.nextDouble();
System.out.print("体重(kg): ");
double weight = scanner.nextDouble();
double bmi = calculateBmi(height, weight);
String message = judgeBmi(bmi);
System.out.println("BMI: " + bmi);
System.out.println(message);
}
}
Java重要なポイントを整理します。
1.calculateBmi は「BMI を計算するだけ」
2.judgeBmi は「BMI からメッセージを返すだけ」
3.main は「入力 → 計算 → 判定 → 表示」という流れの制御だけ
このように、「役割ごとにメソッドを分ける」考え方は、初級のうちに癖にしておくと後がめちゃくちゃ楽です。
メソッドのオーバーロード(同じ名前で引数違い)
メソッド名は同じでも、「引数の数や型」が違えば定義を増やせます。
これがオーバーロードです。
public class Main {
public static int add(int a, int b) {
return a + b;
}
public static double add(double a, double b) {
return a + b;
}
public static void main(String[] args) {
int x = add(3, 5);
double y = add(2.5, 4.3);
System.out.println(x);
System.out.println(y);
}
}
Javaadd という同じ名前で、int 用と double 用の 2 つのメソッドが存在します。
呼び出し側の引数の型に応じて、自動で適切なメソッドが選ばれます。
ここで押さえておきたいのは次の点です。
1.「やりたいことは同じだが、型や条件だけ微妙に違う処理」を、一つの名前で扱える
2.名前の意味(ここでは add の「足す」)を中心に考えて、パターンを増やすイメージ
3 日目:クラスとオブジェクトの「入口」
クラスとは何か(設計図のイメージ)
超シンプルに言うと、クラスは「データと、そのデータに関する処理をまとめた設計図」です。
例として、「人」を表すクラスを作ってみます。
public class Person {
String name;
int age;
void greet() {
System.out.println("こんにちは、" + name + "です。年齢は " + age + " 歳です。");
}
}
Javaここには 2 つの要素があります。
1.フィールド(name, age)
クラスが持っている「データの項目」です。
オブジェクトごとに中身が変わります。
2.メソッド(greet)
そのデータに対して行う「処理」です。this.name と書かなくても、同じクラス内では名前だけでアクセスできます(基本は同じことだと思って OK)。
オブジェクトを作って使う
この Person クラスを使うための Main クラスを用意します。
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "太郎";
p1.age = 20;
Person p2 = new Person();
p2.name = "花子";
p2.age = 25;
p1.greet();
p2.greet();
}
}
Java重要ポイントを深掘りします。
1.Person p1 = new Person();new で「設計図から実体(オブジェクト)を生成している」。p1 は「Person 型の変数」で、その中身は「Person オブジェクトへの参照」です。
2.p1.name や p1.age で、p1 という人の情報を書き換えている。
3.p1.greet() と p2.greet() は、同じメソッド定義を使いつつ、中身のデータが違うので結果も変わる。
「クラス = 設計図」「オブジェクト = 実体」という二段構造をイメージできていれば十分です。
4 日目:コンストラクタと配列・複数オブジェクトの管理
コンストラクタで「作るときに必ず値を入れる」
今の Person は
Person p = new Person();
p.name = "太郎";
p.age = 20;
Javaのように、後から値をセットしています。
「作るときに必ず名前と年齢をもらわないと困る」という場合、コンストラクタを使います。
public class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
void greet() {
System.out.println("こんにちは、" + name + "です。年齢は " + age + " 歳です。");
}
}
Javaここでのポイントは 2 つです。
1.コンストラクタの名前はクラス名と同じ(Person)。戻り値の型は書かない。
2.this.name = name;
ここでの this.name は「このオブジェクトのフィールド」。
右側の name は引数。名前がかぶるので、区別するために this. を付けています。
使う側はこうなります。
public class Main {
public static void main(String[] args) {
Person p1 = new Person("太郎", 20);
Person p2 = new Person("花子", 25);
p1.greet();
p2.greet();
}
}
Javaこれで「作った瞬間から必ず正しい状態にある」オブジェクトになります。
コンストラクタを使うと、「初期化漏れ」が防げるのが大きなメリットです。
Person の配列を扱う
複数人をまとめて管理してみましょう。
public class Main {
public static void main(String[] args) {
Person[] people = {
new Person("太郎", 20),
new Person("花子", 25),
new Person("次郎", 18)
};
for (int i = 0; i < people.length; i++) {
people[i].greet();
}
}
}
Javaこのコードには、初級の「おいしい要素」が詰まっています。
1.配列の中に「オブジェクト」が入っている
2.people[i] で i 番目の Person を取り出し、people[i].greet() でメソッドを呼べる
3.配列の長さを people.length で取って for で回している
「基本型の配列」から「オブジェクトの配列」に感覚を広げるのが、この日のゴールです。
5 日目:ArrayList で「可変長のリスト」を使う
配列の弱点と ArrayList のメリット
配列は
- サイズが固定(あとから増やせない)
- 要素を追加・削除するのが面倒
というデメリットがあります。
そこでよく使われるのが ArrayList です。
最初に import が必要です。
import java.util.ArrayList;
Java基本的な使い方は次のとおりです。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> todoList = new ArrayList<>();
todoList.add("牛乳を買う");
todoList.add("メール返信");
todoList.add("Javaを勉強");
System.out.println("件数: " + todoList.size());
System.out.println("1件目: " + todoList.get(0));
for (int i = 0; i < todoList.size(); i++) {
System.out.println((i + 1) + "件目: " + todoList.get(i));
}
}
}
Java重要な点を整理します。
1.ArrayList<String> の String の部分は「このリストに入る型」。ArrayList<Person> など、オブジェクト型も入れられます。
2.new ArrayList<>() で、中身が空のリストを作る。
配列と違い、あとからどんどん add できます。
3.size() で要素数、get(index) で要素取得、remove(index) で削除ができます。
Person のリストを ArrayList で管理する
4 日目の Person を使って、リストにしてみましょう。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Person> people = new ArrayList<>();
people.add(new Person("太郎", 20));
people.add(new Person("花子", 25));
people.add(new Person("次郎", 18));
for (int i = 0; i < people.size(); i++) {
Person p = people.get(i);
p.greet();
}
}
}
Java配列から ArrayList に変えただけで、使用感がかなり柔らかくなるはずです。
特に「あとから追加していく」「削除する」場面では、ArrayList の恩恵が大きいです。
6 日目:ミニ「生徒管理」アプリを作る(クラス+ArrayList+Scanner)
アプリの仕様を決める
ここでは、コンソールベースのシンプルな「生徒管理」アプリを作ります。
機能のイメージは次のとおりです。
1.生徒を追加(名前と点数)
2.一覧表示
3.平均点を表示
4.終了
最初は入力ミスなどのエラー処理は最小限でかまいません。
目的は「クラス」「ArrayList」「Scanner」「ループ」を全部まとめて使うことです。
Student クラスを定義する
まずは設計図から。
public class Student {
String name;
int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
void printInfo() {
System.out.println("名前: " + name + ", 点数: " + score);
}
}
Javaシンプルですが、現実世界の「生徒」をそれっぽく表現しています。
メインロジックを書く
Main クラスで、ArrayList と Scanner を使ってメニュー式にします。
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("==== メニュー ====");
System.out.println("1: 生徒を追加");
System.out.println("2: 一覧表示");
System.out.println("3: 平均点を表示");
System.out.println("0: 終了");
System.out.print("番号を選んでください: ");
int choice = scanner.nextInt();
scanner.nextLine(); // 改行の読み飛ばし
if (choice == 1) {
System.out.print("名前: ");
String name = scanner.nextLine();
System.out.print("点数: ");
int score = scanner.nextInt();
scanner.nextLine();
Student s = new Student(name, score);
students.add(s);
System.out.println("追加しました。");
} else if (choice == 2) {
if (students.isEmpty()) {
System.out.println("生徒が登録されていません。");
} else {
System.out.println("=== 生徒一覧 ===");
for (Student s : students) {
s.printInfo();
}
}
} else if (choice == 3) {
if (students.isEmpty()) {
System.out.println("生徒がいないので平均点を計算できません。");
} else {
int sum = 0;
for (Student s : students) {
sum += s.score;
}
double avg = (double) sum / students.size();
System.out.println("平均点: " + avg);
}
} else if (choice == 0) {
System.out.println("終了します。");
break;
} else {
System.out.println("無効な入力です。");
}
System.out.println();
}
}
}
Javaここで重要なポイントを深掘りします。
1.while(true) + break
「メニューを何回も表示する」ために、無限ループし、終了時に break で抜ける構造です。
2.students.isEmpty()
「何も入っていないか」を簡単にチェックできます。
配列とは違う便利メソッドの一つです。
3.拡張 for 文 for (Student s : students)ArrayList の要素を順番に取り出して処理するシンプルな書き方。for (型 変数名 : コレクション) という形で覚えておきましょう。
7 日目:例外処理の入口と、小さなリファクタリング
入力ミスに少しだけ強くする(例外処理の入口)
6 日目のアプリでは、数字を入れるべきところに文字を入れるとエラーで落ちます。
ここで Java の「例外」の存在に少し触れます。
数字の入力部分を try-catch で包んでみます。
try {
System.out.print("点数: ");
int score = scanner.nextInt();
scanner.nextLine();
// ここまで来れば score はちゃんと整数
} catch (Exception e) {
System.out.println("数値として読み取れませんでした。0 点として扱います。");
scanner.nextLine(); // 入力バッファをクリア
int score = 0;
}
Javaここでの大事な学びは、
1.「失敗するかもしれない処理」は try-catch で囲っておける
2.catch で「失敗した場合の対応」を自分で決められる
という 2 点です。
初級段階では、例外処理は「存在を知っておく」「落ちたときに怖がらない」くらいで十分です。
コードを少し整理する(リファクタリング)
生徒管理アプリを眺めて、「ここはメソッドに分けた方が読みやすいな」と感じた部分を抜き出してみます。
例えば、平均点計算は別メソッドにできます。
public static double calcAverage(ArrayList<Student> students) {
int sum = 0;
for (Student s : students) {
sum += s.score;
}
return (double) sum / students.size();
}
Javamain の中ではこう書けます。
} else if (choice == 3) {
if (students.isEmpty()) {
System.out.println("生徒がいないので平均点を計算できません。");
} else {
double avg = calcAverage(students);
System.out.println("平均点: " + avg);
}
}
Javaこの「メソッドに切り出す」という動きが、リファクタリングの第一歩です。
コードの意味ごとの「かたまり」を見つけたら、迷わずメソッドにしていく癖をつけてください。
この初級編で身についたことと、次の一歩
この 7 日間で、あなたは次のようなことを経験しました。
1.Scanner を使って、ユーザーからの入力を受け取る
2.メソッドを「役割ごと」に分けて、分かりやすいコードを書く
3.自分でクラスを定義して、オブジェクトを作り、メソッドでふるまいを持たせる
4.コンストラクタで「作られた瞬間に正しい状態」にする
5.ArrayList を使って、可変長のリストを柔軟に扱う
6.クラス+ArrayList+Scanner で小さなコンソールアプリを作る
7.例外処理の入口と、メソッドへの切り出し(リファクタリング)の感覚をつかむ
これは Java の「本格的なオブジェクト指向」に進むための土台そのものです。
次のステップとしては、例えば以下のような方向があります。
1.クラス同士の関係(「生徒」と「クラス(クラスルーム)」など)を作ってみる
2.継承やインターフェースに触れて、オブジェクト指向に踏み込む
3.ファイル入出力(CSV に書き出す家計簿など)に挑戦する
4.Spring や JavaFX など、実務寄りのフレームワークに触れ始める


