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

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

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

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

リファクタリング

リファクタリングとはコードの本体を再構築するための手法であり、外見を変更せずに内部構造を変更/改善させることを指します。

Q&A

解決済

2回答

223閲覧

リファクタリング:求める入力がなされるまで繰り返し

Emine

総合スコア12

Java

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

リファクタリング

リファクタリングとはコードの本体を再構築するための手法であり、外見を変更せずに内部構造を変更/改善させることを指します。

0グッド

1クリップ

投稿2018/04/18 12:49

以下のような場合

java

1System.out.println( "ゲーム回数を入力してください:"); 2 int playCount = 0; 3 while ( true) { 4 try { 5 playCount = Main.SCANNER.nextInt(); // ゲーム数の入力 6 while ( playCount <= 0) { 7 System.out.println( "ゲーム回数は1回以上です。"); 8 System.out.println( "ゲーム回数を入力してください"); 9 playCount = Main.SCANNER.nextInt(); 10 } 11 } 12 catch ( InputMismatchException e) { 13 System.out.println( "ゲーム回数は1回以上です。"); 14 System.out.println( "ゲーム回数を入力してください"); 15 Main.SCANNER.nextLine(); 16 17 } 18 if ( playCount >= 1) { 19 break; 20 } 21 }

1以上の自然数の入力を要求したいのですがtry-cahtchの中が冗長な気がします。
しかし上手い書き換えがわかりません。例を示していただけると嬉しいです。

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

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

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

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

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

guest

回答2

0

try~catchとScannerの勉強をしながら‥。

java

1int playCount = 0; 2while (playCount <= 0) { 3 System.out.print("ゲーム回数を入力してください:"); 4 Scanner sc = new Scanner(System.in); 5 try { 6 playCount = sc.nextInt(); 7 if (playCount <= 0) { 8 System.out.println("[ERROR] ゲーム回数は1回以上です。"); 9 } 10 } catch (InputMismatchException e) { 11 System.out.println("[ERROR] 数値を入力してください。"); 12 } 13} 14System.out.println("ゲーム回数は"+playCount+"回です。");

エラーメッセージは適切に。

投稿2018/04/19 05:52

fuzzball

総合スコア16731

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

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

Emine

2018/04/19 12:07

これなら入力し直す理由が明確ですね。ありがとうございます。
guest

0

ベストアンサー

こんなのはどうでしょう。

Java

1import java.util.Scanner; 2 3class Main { 4 static int inputInt(Scanner sc, String message) { 5 while(true) { 6 try { 7 return Integer.parseInt(sc.nextLine()); 8 } 9 catch(NumberFormatException e) { 10 System.out.print(message); 11 } 12 } 13 } 14 15 public static void main(String[] args) { 16 try(Scanner sc = new Scanner(System.in)) { 17 int playCount = -1; 18 while(playCount <= 0) { 19 String message = "ゲーム回数は1回以上です。\nゲーム回数を入力してください\n"; 20 21 System.out.print(message); 22 playCount = inputInt(sc, message); 23 } 24 25 System.out.println("playCountは" + playCount + "です。"); 26 } 27 } 28}

投稿2018/04/18 13:05

編集2018/04/18 13:31
LouiS0616

総合スコア35660

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

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

Emine

2018/04/19 04:32

最初うまくいかず困ったのですが、tryの()の中のScannerが閉じることに気づき、少し変更したらうまくいきました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問