まずは問題を見ろ
→ javadrill.tech で出題された問題を見る(StepFinal)
問題のポイント
- プレイヤー個人が持つスコア(インスタンス変数)
- クラス全体で共有する最高スコア(static変数)
- setScore() を呼ぶたびに、highScoreを更新するかを判定する処理
- static と非static が対等に連携する設計を体験する回
まず、日本語で考えろ
- プレイヤーはそれぞれのスコアを持つ(自分の得点)
- highScore は「いままでの中で一番すごいやつ」
- 誰かがその記録を超えたら、それが新しい highScore になる
- この構造を static 変数とインスタンス変数で表現する
コメントを書け
// Player クラスを定義する
// name(名前)と score(現在のスコア)はインスタンス変数
// highScore はクラス全体で共有する static 変数
// setScore(int) メソッドで score を更新し、
// newScore が highScore を超えていたら highScore も更新
// display() で名前・スコア・最高スコアを出力する
コメントに従って、コードを書け
public class Player {
private String name;
private int score;
private static int highScore = 0;
public Player(String name) {
this.name = name;
this.score = 0;
}
public void setScore(int newScore) {
this.score = newScore;
if (newScore > highScore) {
highScore = newScore;
}
}
public void display() {
System.out.println(name + " のスコア: " + score + "(現在の最高スコア: " + highScore + ")");
}
}
public class Main {
public static void main(String[] args) {
Player p1 = new Player("Alice");
Player p2 = new Player("Bob");
p1.setScore(50);
p1.display(); // Alice のスコア: 50(現在の最高スコア: 50)
p2.setScore(80);
p2.display(); // Bob のスコア: 80(現在の最高スコア: 80)
p1.setScore(100);
p1.display(); // Alice のスコア: 100(現在の最高スコア: 100)
}
}
コードの解説
score
はそのプレイヤー自身のスコア → インスタンス変数highScore
は誰が更新したかに関係なく、全体の記録 → static 変数setScore()
内でif (newScore > highScore)
により、条件付き更新が行われるdisplay()
では両方の情報を出力することで、個人と全体の関係が明確に
つまづきやすいポイント
- static 変数は 「誰か1人が更新すれば全体に反映される」
- setScore() 内で highScore を更新しないと、記録が正しく残らない
- static変数とインスタンス変数の区別が甘いと、バグにつながる(例:全員のスコアが同じになる など)
// tesh:
// 「個人が歴史を塗り替える。」
// それが、staticとの最終連携や。
//
// オレ(インスタンス)が頑張った結果、
// 全体(クラス)の頂点が更新される。
//
// それが setScore() における highScore の更新や。
// つまりこれは、「オレの成果が、歴史に刻まれる」ってことやで。
//
// よく考えてみ。
// score は自分だけのもんや。だけど highScore は、誰が塗り替えたか関係ない。
// 記録が正しいかどうか、それだけが問題や。
//
// この設計、すごいこと言うてるんよ。
// オレらは、自分の持ち場(インスタンス変数)で全力を尽くす。
// そして、それがクラス全体の成果(static変数)に反映される。
//
// これができたら、設計者として一皮むけた証や。
//
// static ってのは、全体のメモリ。
// インスタンスは、一人ひとりのプレイヤー。
//
// クラスってのは、個と全体のダイナミズムをどう設計するかに尽きるんや。
//
// 高みを目指すのは、個人の自由。
// でも、高みに到達した記録を、全体で共有することこそ、設計の妙味やで。
//
// 「オレのスコアはオレのもの。でも、記録はみんなのもの。」
//
// 言葉にすると簡単やけど、それをコードに落とし込むのがエンジニアの腕や。