質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

3回答

2602閲覧

Javaの数字を連番で入力し、条件を指定する

swantica_

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/07/31 05:21

Javaによるソースコードなのですが
1から3までの数字を条件に入力させたいと思います。
以下のソースでは1~3以外の数字を入力してもエラーにならず
最後に1~3を入力してくださいと出るだけでエラー処理になりません。

package test00;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Exercise {
public static void main( String[] args )throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//合計の値を0にする
int sum = 0;
int i = 1;
int x = 0;
//数字入力させるコマンド?
System.out.println("1~3の数字を入力してください");
System.out.println();
do {
//doの処理文
System.out.println(i + "回目ですどうぞ!" +" "+ "合計:" + sum);
sum += Integer.parseInt( br.readLine());
i ++;
}while(sum < 32);//whileの条件が32なら32に達すると処理が終了する。
if ( 1>= x && x <= 3) {
System.out.println("1~3の数字を入力してください");
}else {
System.out.println();
}

System.out.println(sum + "あなたの負けです。");
}
}

if文で検討しているのですがifで(1>= x && x <= 3)の場合エラーとした場合
正常に処理する場合elseは必要なのでしょうか?
また、プレイヤーAとBを交互に表示するにはどうしたらいいのでしょうか?

お目汚し失礼致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/31 05:25

>プレイヤーAとBを交互に表示する 急にでてきた「プレイヤー」という概念は何のことでしょうか
tetutetu

2019/07/31 05:33

お目汚し失礼します、のように記述し回答者側への配慮を考えるのであれば(普通考えますが) まずは前回、今回と連続で指摘されている部分を修正されてはいかがでしょうか。 方法が分からないのであれば聞けば良いのではないでしょうか。
m.ts10806

2019/07/31 06:48

質問は編集できますので適宜ご対応ください。 特にコードは平で提示されても質問者さんと状態のコードではありませんので。 ※あえて同じ文言コピーしてきた
gentaro

2019/07/31 10:07

あら、マークダウン前回も指摘されてるのか。 「参考にする」とは何だったのか…
guest

回答3

0

コードが煩雑で追いづらいならば、適当にメソッドを定義して整理してやると良いです。

Java

1// 1以上3以下の数値を取得できるまで入力を要求する 2static int inputInt1to3(BufferedReader br, String prompt) { 3 無限ループ { 4 プロンプトを表示; 5 int input = 入力; 6 7 if(入力が適正) { 8 return input; 9 } 10 11 入力が不適正で有る旨の出力; 12 } 13}

Java

1do { 2 int x = inputInt1to3(br, 適当な文字列); 3 4 ... 5} while(...);

また、プレイヤーAとBを交互に表示するにはどうしたらいいのでしょうか?

boolean型の変数を用意して、それを手番の判定に用いるのが単純な方法でしょう。

コードの書き方について

teratailには、コードを見やすく表示する機能が有ります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
Java

投稿2019/07/31 05:33

編集2019/07/31 05:36
LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2019/07/31 05:42 編集

なお前回の質問 https://teratail.com/questions/202550 と根源的な原因は同じで、ループの挙動を理解していないのが問題です。もっと簡単な例題に立ち返って練習してみては。
guest

0

以下のソースでは1~3以外の数字を入力してもエラーにならず

最後に1~3を入力してくださいと出るだけでエラー処理になりません。

はい、条件分岐に使っているxは最初にint x = 0;で初期化したきり一切変更していないので、この条件分岐は全くの無意味になってしまっています。

正常に処理する場合elseは必要なのでしょうか?

それ以前の問題として、コード全体の構造の見直しが必要です。

投稿2019/07/31 05:26

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそも現状のこのコードで行われる処理を理解していますか?

do-while文を扱う練習がしたいのであれば、題材が適切ではありません。
前回の質問を見るに、2人でプレイする数かぞえゲームを作成したいのだと思いますが
初めから合計値であるsumの数値がゲームの終了条件になる値を超えていたらゲームになりません。

以上のことから、そもそもdo-whileを使う必要がないです。
また

if ( 1>= x && x <= 3)

1~3の数字か否かを判定したいのは文章からかろうじて伝わりましたが
ここでチェックしているのは
x(既に他の方が回答されている通り0から一切変動していない値)が
1以下、かつ3以下かどうか という判定です。
判定すべきなのは「1以下より小さい、または3以上より大きいかどうか」ではないでしょうか?

更に、そもそもこの判定が行われるのはsumが32を超えた後。ゲーム終了後になっています。
記述する位置がおかしいです。
仮にdo内に丸々移動したとしても、sumに意図しない値は加算されます。

2人で遊ぶためにプレイヤーA,Bを表示する以前に
まずは1から作り直すことをお勧めします。

投稿2019/07/31 05:52

編集2019/07/31 06:00
tetutetu

総合スコア419

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問