あいさつ
未経験からプログラミングを始めてから約2か月経ちました。
少しでもアウトプットして頭の中を整理していくために、じゃんけんアプリを作成してみました。最後の方にコード全体を記載しています。
開発環境
- JDK(Java開発環境、バージョン21)
- IntelliJ IDEA(エディタ)
- ターミナル(アプリの実行確認)
機能一覧
- player1の手合いを表示
- player2の手合いを乱数にて表示
- player1とplayer2の勝敗を判断
- 再戦の選択
使用技術
- Scanner
- Random
- while
- switch
- if
- ->
手順
1.パッケージを作成しimport文を入力
2.Scanner・Randomを宣言
3.while・switchを使用し、player1の手合い入力
4.Random・switchを使用し、player2の手合いをランダムに表示
5.ifを使用し、勝敗を表示
6.while・ifを使用し、再戦もしくは終了
1.パッケージを作成しimport文を入力
まずはじめに、パッケージ宣言(全て小文字)をします。
次にimport文をパッケージとクラスの間に入力します。
package projava;
import java.util.Random;
import java.util.Scanner;
2.Scanner・Randomを宣言
ファイルと同名のクラス(今回だとJanken)にメインメソッドを書きます。
クラス名は単語の先頭が大文字になるように入力しましょう。
Scannerを使用し変数宣言をすることで、外部からデータを入力できるように設定します。次に乱数を使用できるようにRandomを宣言します。
printlnを使用し『じゃんけんゲームを始めるよ!』と表示します。
public class Janken {
public static void main(String[] args) {
//ユーザー入力を受けつけるためのScanner
Scanner sc = new Scanner(System.in);
//player2が何を出すか決めるRandom
Random rnd = new Random();
System.out.println("じゃんけんゲームを始めるよ!");
3.while・switchを使用し、player1の手合い入力
whileの中にprintlnやprintを使用し選択を促す文章を書く。
変数(player1)にキーボードで整数を入力できるようにする。
ifを使用して1~3以外を入力したら、再度選択し直すように設定しています。
//player1が何を出すか入力
while (true) {
System.out.println("1.グー 2.チョキ 3.パー の中から数字を選んでね!");
System.out.print("どれを出す?: ");
int player1 = sc.nextInt();
if (player1 < 1 || player1 > 3) {
System.out.println("入力が間違っているよ");
continue;
}
switchを使用し選択された1~3の数値に対して『グー』『チョキ』『パー』を表示させる。
//選択結果を表示
switch (player1) {
case 1 -> System.out.println("あなた: グー!");
case 2 -> System.out.println("あなた: チョキ!");
case 3 -> System.out.println("あなた: パー!");
}
4.Random・switchを使用し、player2の手合いをランダムに表示
変数(player2)に1~3の乱数を設定し、その結果に対してswitchでplayer2の手合いをランダムに表示する。
//player2が何を出すかランダムに表示
int player2 = rnd.nextInt(1, 4);
switch (player2) {
case 1 -> System.out.println("あいて: グー!");
case 2 -> System.out.println("あいて: チョキ!");
case 3 -> System.out.println("あいて: パー!");
}
5.ifを使用し、勝敗を表示
ifを使用しプレイヤー同士の手合いが同じ場合は『あいこ!』と表示し、
else ifにはplayer1が勝った場合の式を論理演算子(&& や ||)を使用し『あなたの勝ち!』と表示する。それ以外の組み合わせの場合はelseを使用し『あなたの負け...』と表示します。
//勝敗を表示
if (player1 == player2) {
System.out.println("あいこ!");
continue;
} else if ((player1 == 1 && player2 == 2) ||
(player1 == 2 && player2 == 3) ||
(player1 == 3 && player2 == 1)) {
System.out.println("あなたの勝ち!");
} else {
System.out.println("あなたの負け...");
}
6.while・ifを使用し、再戦もしくは終了
whileの中にprintlnやprintを使用し選択を促す文章を書く。
変数(choose)にキーボードで整数を入力できるようにする。
ifを使用して1と2以外を入力したら、再度選択し直すように設定しています。
『2.いいえ』を選択することでアプリを終了します。
//再戦の選択
while (true) {
System.out.println("\nもう一度遊ぶ?");
System.out.print("1.はい 2.いいえ: ");
int choose = sc.nextInt();
if (choose == 1) {
break;
} else if (choose == 2) {
System.out.println("また遊んでね!");
return;
} else {
System.out.println("入力が間違っているよ");
}
コードの全体像
わたし自身がコードの全体を見ながら、どこになにが書いてあるか確認したいタイプなので、まとめて表示させています。
package projava;
import java.util.Random;
import java.util.Scanner;
public class Janken {
public static void main(String[] args) {
//ユーザー入力を受けつけるためのScanner
Scanner sc = new Scanner(System.in);
//player2が何を出すか決めるRandom
Random rnd = new Random();
System.out.println("じゃんけんゲームを始めるよ!");
//player1が何を出すか入力
while (true) {
System.out.println("1.グー 2.チョキ 3.パー の中から選んでね!");
System.out.print("どれを出す?: ");
int player1 = sc.nextInt();
if (player1 < 1 || player1 > 3) {
System.out.println("入力が間違っているよ");
continue;
}
//選択結果を表示
switch (player1) {
case 1 -> System.out.println("あなた: グー!");
case 2 -> System.out.println("あなた: チョキ!");
case 3 -> System.out.println("あなた: パー!");
}
//player2が何を出すかランダムに表示
int player2 = rnd.nextInt(1, 4);
switch (player2) {
case 1 -> System.out.println("あいて: グー!");
case 2 -> System.out.println("あいて: チョキ!");
case 3 -> System.out.println("あいて: パー!");
}
//勝敗を表示
if (player1 == player2) {
System.out.println("あいこ!");
continue;
} else if ((player1 == 1 && player2 == 2) ||
(player1 == 2 && player2 == 3) ||
(player1 == 3 && player2 == 1)) {
System.out.println("あなたの勝ち!");
} else {
System.out.println("あなたの負け...");
}
//再戦の選択
while (true) {
System.out.println("\nもう一度遊ぶ?");
System.out.print("1.はい 2.いいえ: ");
int choose = sc.nextInt();
if (choose == 1) {
break;
} else if (choose == 2) {
System.out.println("また遊んでね!");
return;
} else {
System.out.println("入力が間違っているよ");
}
}
}
}
}
実行結果
つまづいた点
- 論理演算子の組み合わせ方が分からず思ったように動かなかった
- whileの記入する箇所を間違えループしないところまでループした
- continueの記入を忘れてループが終わった
- breakの記入を忘れて無限ループした
- returnの記入を忘れて再戦せずにアプリが終了した
まとめ
- switchのなかにラムダ式(->)を使用し、スッキリしたコードにすることができた
- 論理演算子を使用し、if文の中に複雑な選択肢を可能にできた
- ジャンプ文(break、continue、return)がまだ理解できていないことが分かった
たくさんのコードを書くことで覚えていけると思っているので、苦手なことを中心に勉強していきます。
最後まで見ていただき、ありがとうございました。
次にどんなコードにチャレンジするといいかアドバイスをいただけると嬉しいです。
参考にした記事
アルゴリズム思考を鍛える!Javaで作るシンプルじゃんけんアプリ 【学習記録】 #初心者 - Qiita
参考にした本
・プロになるJava
