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

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

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

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

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

1回答

11024閲覧

trycatchでtryの処理に戻す方法

chachachamaru

総合スコア4

Java

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

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

1クリップ

投稿2020/05/05 05:03

入力してもらいそのデータを扱うコンソールアプリを作成しております。そのデータ入力の際に、
intで価格と仮かどうかを入力してもらいます。

教えてほしいこと
・trycatchでもし文字列が入力された場合をcatchにしているのですが、その際に再度入力してもらうようにしたいです。(tryの処理に戻る)どう記述すればよいのでしょうか?

入力→文字列打ち込まれた場合→再入力
入力→数字→次の質問に進む
という形です。

・またこの下記コードで実行すると、コンソールで仮の場合は1を仮じゃない場合は2を入力してください。と聞いたあとすぐに(こちらがうちこむことなく)catchに入り、文字列が入力されませんでしたが出てきてしまいます。これは何が原因でしょうか?(コード下のコンソール表示参照)

初心者の為、説明不足な点があると思いますが何卒お願いいたします。

****現在書いているコード** int money; try{System.out.println("価格を入力してください"); money = touroku.nextInt(); }catch(InputMismatchException e) { System.out.println("文字列が入力されました。"); money =0; } int kari; try{System.out.println("仮の場合は1を仮じゃない場合は2を入力してください。"); kari = touroku.nextInt(); }catch(InputMismatchException e) { System.out.println("文字列が入力されました。"); kari=0; }
**コンソール画面** 価格を入力してください d 文字列が入力されました。 仮の場合は1を仮じゃない場合は2を入力してください。 文字列が入力されました。 名前:s値段:0仮登録:0で登録完了しました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

シンプルに、try-catchをwhileなどのループで囲ってしまえばいいです。
無限ループにして、「成功した時抜ける」のが一番簡単なつくりだと思います。

java

1 while (true){ 2 try{System.out.println("価格を入力してください"); 3 money = touroku.nextInt(); //文字列が入力された場合は、ここで例外が発生してbreakが実行されない 4 break; 5 }catch(InputMismatchException e) { 6 System.out.println("文字列が入力されました。"); 7 money =0; 8 } 9 }

ただし、この方法だけでは数字ではない文字列が入力された場合に正真正銘の無限ループになります。これは「読み込もうとしたトークンが数字であった場合だけ読み進める」というnextInt()の仕様が関係しており、**数字ではなかった場合は読み進めません。**今回の例で言うと、"d"が数字ではないためScannerのカーソル(読もうとする始点)が"d"の前から動けません。"d"を打ち込んだ時に、1か2かを問われて入力できずに最後まで進んでしまう原因もここにあります。
そのため、数字ではなかった場合に、それを読み飛ばす工程が必要になります。

java

1 while (true){ 2 try{System.out.println("価格を入力してください"); 3 money = touroku.nextInt(); //文字列が入力された場合は、ここで例外が発生してbreakが実行されない 4 break; 5 }catch(InputMismatchException e) { 6 System.out.println("文字列が入力されました。"); 7 touroku.next(); //読み飛ばし 8 money =0; 9 } 10 }

投稿2020/05/05 05:34

swordone

総合スコア20669

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

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

chachachamaru

2020/05/05 07:44

早速の回答ありがとうございます。無事実行することができました。 読み飛ばしとbreakを使ったwhile文...なるほど。大変勉強になりました。 また質問させていただく際にはぜひよろしくお願いいたします。今回はありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問