This commit is contained in:
2026-10-19 13:50:48 +09:00
parent 2c6d1574e5
commit 0cc90c94a3
95 changed files with 1505 additions and 2 deletions

1
Question04-while/bin/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/bin/

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Question04-while</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,88 @@
# Question04 - 繰り返し
本資料の練習問題は、複数のプログラミング言語(Java / C# / PHP / Python)で共通して利用できるよう記述されています。静的型付け・動的型付けの違いや文字列の連結ルールなど、言語固有の文法仕様に基づき、問題文の表現をご使用の言語の仕様に適宜読み替えて進めてください。
## この問題のねらい
- ある条件を満たす間、処理を繰り返すことができること
- 繰り返しを続けるかどうかの判定条件を、目的に応じて設定できること
- 繰り返しの実行中に、その場で繰り返し自体を打ち切る(早期終了する)ことができること
- 繰り返しの中で変数の値を更新しながら、状態を進めていく処理を書けること
- 入力の受け取り・繰り返し・条件分岐を組み合わせて、簡単なゲームのような一連の処理を組み立てられること
以下の設問はそれぞれ独立したプログラムとして実装してください。
---
## 設問1
0~9のいずれかのランダムな整数を生成し、画面に出力する処理を、生成するたびに繰り返す実装を行うこと。
生成された値が `5` になった時点で繰り返し自体を終了するように、**繰り返しを続けるかどうかの判定条件**を使って終了させること(判定条件を設けなければ、際限なく繰り返され続けてしまう)。
- 出力: 0~9のいずれかの整数を1行に1つずつ出力し続け、`5` を出力した時点で繰り返しを終了する(ランダムな値を使うため、出力される行数や値そのものは実行のたびに変わる)。
---
## 設問2
整数を保持できる変数 `num` を宣言し、`2` で初期化すること。`num` の値が `1000` を超えるまで、繰り返しのたびに `num` の値を2倍にした値を `num` に代入し直すこと。繰り返しが終了したら、`num` の値を出力すること。
- 出力: `1024`
---
## 設問3
0~9のいずれかのランダムな整数を生成し、画面に出力する処理を繰り返す実装を行うこと。
繰り返しを続けるかどうかの判定条件は使わずに(=条件だけを見れば際限なく繰り返され続ける実装のまま)、生成された値が `5` であった場合に、繰り返しの実行中にその場で繰り返し処理を打ち切る(早期終了する)ように実装すること。
- 出力: 0~9のいずれかの整数を1行に1つずつ出力し続け、`5` を出力した時点で繰り返しを終了する(ランダムな値を使うため、出力される行数や値そのものは実行のたびに変わる)。
- 補足: 設問1とは異なり、繰り返し自体の継続条件は変更しないこと。
---
## 設問4
双六(すごろく)を模したプログラムを作成する。
- 双六の総マス数を表す整数変数 `map` を宣言し、`50` で初期化すること。
- 現在までに進んだマス数を表す整数変数 `progress` を宣言し、`0` で初期化すること。
`===== START =====` と出力したあと、`progress` が `map` に到達する(ゴールする)まで、次の処理を繰り返すこと。
1. `Enterキーを押してください。さいころをふります。` と出力し、何らかの入力(内容は問わない)を1行分待ち受ける。
2. 1~6のいずれかのランダムな整数を生成し、さいころの目とする。
3. 出た目の値を使って、`3の目が出ました。` のように、値を含めたメッセージを出力する。
4. `progress` に、出たさいころの目の値を加算する。
5. まだゴールしていない場合は、`残りのマスは47マスです。` のように、残りのマス数(`map` から `progress` を引いた値)を含めたメッセージを出力する。ゴールした場合はこのメッセージを出力しない。
繰り返しが終わったら `===== GOAL =====` と出力すること。
- 補足: さいころの目や繰り返し回数はランダムな値によって変わるため、出力される行数や具体的な値は実行のたびに変わってよい。上記のメッセージの形式・内容が満たされていることを確認する。
---
## 設問5
じゃんけんを行うプログラムを作成する。手は次の整数値で表す。
- `0`: グー
- `1`: チョキ
- `2`: パー
勝敗の状態を表す真偽値の変数 `winFlag` があり、初期値は「負け」を表す値になっている。プレイヤーが勝つまで、次の処理を繰り返すこと。
1. `じゃんけんを行います。`、`あなたの出す手を入力してください`、`0:グー, 1:チョキ, 2:パー` と出力し、数値の入力を1つ受け取って、プレイヤーの手を表す変数 `playerHand` に格納する。
2. `playerHand` の値に応じて、`あなたはグーを出しました`(`0`の場合)のように、選ばれた手が分かるメッセージを出力する。`1`(チョキ)・`2`(パー)の場合も同様に、対応する手の名前を含めたメッセージを出力する。
3. 0~2のいずれかのランダムな整数を生成し、対戦相手の手を表す変数 `npcHand` に格納する。
4. `npcHand` の値に応じて、`相手はグーを出しました`(`0`の場合)のように、対戦相手の手が分かるメッセージを出力する。`1`・`2`の場合も同様に対応する手の名前を含めたメッセージを出力する。
5. 次の勝敗ルールに従って `playerHand` と `npcHand` を比較し、じゃんけんの結果(勝ち・負け・引き分け)が分かるメッセージを出力すること。
- グー(`0`)はチョキ(`1`)に勝つ
- チョキ(`1`)はパー(`2`)に勝つ
- パー(`2`)はグー(`0`)に勝つ
- 同じ手同士は引き分け
6. プレイヤーが勝った場合は、繰り返しを終了してプログラムを終了させること。それ以外(負け・引き分け)の場合は、繰り返しの最後に空行を1行出力してから、次の回を繰り返すこと。
- 補足: 対戦相手の手や繰り返し回数はランダムな値によって変わるため、出力される行数や具体的な内容は実行のたびに変わってよい。

View File

@@ -1,9 +0,0 @@
public class Qestion4_1 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
}
}

View File

@@ -0,0 +1,14 @@
public class Question4_1 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
int num = -1;
while (num != 5) {
num = (int)(Math.random() * 10);
System.out.println(num);
}
}
}

View File

@@ -0,0 +1,14 @@
public class Question4_2 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
int num = 2;
while (num <= 1000) {
num = num * 2;
}
System.out.println(num);
}
}

View File

@@ -0,0 +1,17 @@
public class Question4_3 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
// ループ
while (true) {
int num = (int)(Math.random() * 10);
System.out.println(num);
if (num == 5) {
break;
}
}
}
}

View File

@@ -0,0 +1,32 @@
import java.util.Scanner;
public class Question4_4 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
int map = 50;
int progress = 0;
Scanner scan = new Scanner(System.in);
System.out.println("===== START =====");
while (progress < map) {
System.out.println("Enterキーを押してください。さいころをふります。");
scan.nextLine();
int dice = (int)(Math.random() * 6) + 1;
System.out.println(dice + "の目が出ました。");
progress += dice;
if (progress < map) {
System.out.println("残りのマスは" + (map - progress) + "マスです。");
}
}
System.out.println("===== GOAL =====");
scan.close();
}
}

View File

@@ -0,0 +1,45 @@
import java.util.Scanner;
public class Question4_5 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Scanner scan = new Scanner(System.in);
String[] hands = {"グー", "チョキ", "パー"};
boolean winFlag = false;
while (!winFlag) {
System.out.println("じゃんけんを行います。");
System.out.println("あなたの出す手を入力してください");
System.out.println("0:グー, 1:チョキ, 2:パー");
int playerHand = scan.nextInt();
int npcHand = (int)(Math.random() * 3);
System.out.println("あなたは" + hands[playerHand] + "を出しました");
System.out.println("相手は" + hands[npcHand] + "を出しました");
if (playerHand == npcHand) {
System.out.println("引き分けです");
} else if (
(playerHand == 0 && npcHand == 1) ||
(playerHand == 1 && npcHand == 2) ||
(playerHand == 2 && npcHand == 0)
) {
System.out.println("あなたの勝ちです");
winFlag = true;
} else {
System.out.println("あなたの負けです");
}
if (!winFlag) {
System.out.println();
}
}
scan.close();
}
}