• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:do文とInputMismatchException処理)

do文とInputMismatchException処理

このQ&Aのポイント
  • JavaのScannerを使用して0~6の整数を入力する際に、InputMismatchExceptionが発生し、再度入力を求めずに無限ループになってしまう問題があります。
  • この問題を解決するには、whileループの条件を変更して再入力を促す必要があります。
  • 具体的には、whileループの条件をaが0以下または6以上の場合にtrueとして設定します。

質問者が選んだベストアンサー

  • ベストアンサー
  • isle
  • ベストアンサー率51% (77/150)
回答No.2

> e.printStackTrace(); > の後にa=sc.nextInt()を加えるのでしょうか? > これでは例外発生後に終了してしまいました. > a=next();ではint aに矛盾してしまいますし. InputMismatchExceptionのcatchブロックに、 sc.next(); を加えると良いと思います。 #e.printStackTrace(); #の前でも後でも構いません。 InputMismatchExceptionのcatchブロックが実行されるとき、 aに値は代入されず繰り返し条件は真となるので、 この場合、特にaに何か代入する必要はありません。

20203
質問者

お礼

うまくいきました. 本当にありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • isle
  • ベストアンサー率51% (77/150)
回答No.1

'a'という入力が捨てられないので、ループして(Scannerの)nextIntメソッドで再び例外が発生することを繰り返します。 InputMismatchExceptionが発生したとき、(Scannerの)nextメソッドで入力を捨てるようにすると良いと思います。

20203
質問者

補足

ご回答ありがとうございます. >'a'という入力が捨てられないので、ループして(Scannerの)nextIntメソッドで再び例外が発生することを繰り返します。 確かにそうですね.どうやってこの`a'を消そうかわかりませんでした. >InputMismatchExceptionが発生したとき、(Scannerの)nextメソッドで入力を捨てるようにすると良いと思います。 これはどういうことでしょうか. e.printStackTrace(); の後にa=sc.nextInt()を加えるのでしょうか? これでは例外発生後に終了してしまいました. a=next();ではint aに矛盾してしまいますし.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • java eclipse do-while文

    計算問題のプログラムです。No…0を選択したときにwhile文から抜け出したいです。 抜け出せない原因と解決方法(プログラム)を教えていただけるとありがたいです。 package lesson5; import java.util.Random; import java.util.Scanner; public class MentalArithmetic { static Scanner stdIn = new Scanner(System.in); static boolean confirmRetry(){ int cont; do{ System.out.print("もう一度?<Yes・・・1/No・・・0> : "); cont = stdIn.nextInt(); }while (cont != 0 && cont != 1); return cont ==1; } static void mondai1(){ Random rand = new Random(); do{ int p = rand.nextInt(900) + 100; int q = rand.nextInt(900) + 100; int r = rand.nextInt(900) + 100; while(true){ System.out.println(p + "+" + q + "+" + r + " = " ); int k = stdIn.nextInt(); // if(k == p + q + r) // break; System.out.println("違いますよ!!"); } }while (confirmRetry()); } public static void main(String[] args) { System.out.println("暗算力トレーニング!!"); while (true) { mondai1(); } } }

  • javaでif文を使ってわかりません

    javaでif文を使ってわかりません わからないのはキーボード入力で0なら「0です」と偶数・奇数ならそれぞれ偶数・奇数と表示するif文のプログラムです。 とりあえず import java.util.Scanner; public class OddEven2 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int str = sc.nextInt(); if(str==0) { System.out.println("0です"); } } } まではできました けど何億とある数字をキーボード入力で奇数なら奇数だけ表示させるとはどういうことでしょうか? 条件処理でこの値以上この値以下でなわけないし 糸口さえ掴めない状態です ヒントをいただけるとありがたいです

  • javaで判別式のプログラミングを作りたいのですが

    javaで二次方程式ax2+bx+c=0が,2つの異なる実数解をもつ,実数の重解をもつ,実数解をもたないのいずれであるかを判別するプログラムを作りたいのですが、 何度実行しても正しい答えが出てくれません。なぜでしょうか? import java.util.Scanner; class Kadai { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int a,b,c,d; System.out.println("二次方程式y=ax^2+bx+cの解を判別します。"); System.out.print("aを入力してください。:"); a = sc.nextInt(); System.out.print("bを入力してください。:"); b = sc.nextInt(); System.out.print("cを入力してください。:"); c = sc.nextInt(); d=b^2-4*a*c; System.out.println("y="+a+"x^2+"+b+"x+"+c+"の判定は以下の通りです。"); if(d>0){ System.out.println("判別式D>0"); System.out.print("2つの異なる実数解をもつ。"); } if(d==0){ System.out.println("判別式D=0"); System.out.print("実数の重解をもつ。"); } if(d<0){ System.out.println("判別式D<0"); System.out.print("実数解をもたない。"); } } } これを実行すると下の画像のように異なる結果が出てしまいます。 この場合、正しくは実数の重解を持つですよね? どこが間違っているか指摘してくださると嬉しいですm(_ _)m

    • ベストアンサー
    • Java
  • 構文解析中にファイルの終わりに移りました。

    いつも大変お世話になりありがとうございます。 度々申し訳ございません。 コンパイルエラーが解読できません。 アドバイスのほど宜しくお願い申し上げます。 import java.util.*; class Monster { private int power; Monster(int p) { power = p; } class PlayWithMonster6 { public static void main(String[] args) { Monster m = new Monster(10); System.out.println("モンスターが生まれました"); Scanner sc = new Scanner(System.in); int ans, food; while(m.getPower() > 0) { System.out.println("\nモンスターのパワー:" + m.getPower()); System.out.println("どうしますか"); System.out.print("1 散歩させる 2 食べさせる 3 終了>"); ans = sc.nextInt(); if(ans == 1) { m.walk(); } else if( ans == 2) { System.out.println("食べさせる量を入力してください"); System.out.print("整数入力>"); food = sc.nextInt(); m.eat(food); } else { System.out.println("終了します"); break; } } System.out.println("\nまた遊ぼうね"); } }

    • ベストアンサー
    • Java
  • java Eclipse 初心者 メソッド

     次のようなプログラムを書きました。”変数 mainにvoidは無効な型です。”とエラーが発生しました。 package lesson5; import java.util.Random; import java.util.Scanner; public class MentalArithmetic { static Scanner stdIn = new Scanner(System.in); static boolean confirmRetry(){ int cont; do{ System.out.print("もう一度?<Yes・・・1/No・・・0> : "); cont = stdIn.nextInt(); }while (cont != 0 && cont != 1); return cont ==1; } static int mondaix(){ Random rand = new Random(); int a = rand.nextInt(900) + 100; // return a; } static void mondai1( int p, int q, int r){ do{ while(true){ System.out.println(p + "+" + q + "+" + r + " = " ); int k = stdIn.nextInt(); // if(k == p + q + r) // break; System.out.println("違いますよ!!"); } }while (confirmRetry()); public static void main(String[] args) { System.out.println("暗算力トレーニング!!"); while (true) { int x = mondaix(); int y = mondaix(); int z = mondaix(); mondai1( x, y, z); } } } }  これがプログラムです。大学の課題でついにつまずきました。エラーの原因と解決方法(プログラム)を教えていただけるとありがたいです。  初めの方の内容なので簡単なレベル(技術)で解決できると助かります。

  • 複数行キーボード入力した後に再度入力する?

    複数行まとめてキーボードから入力を得た後に、再度入力を得たいのですが方法がわからず困っています。 whileループで複数行入力しCTRL_Dで入力終了、その後再度キーボード入力を得るようにコードを書きましたが、うまくいきません。 1、スキャナーを使用 public static void main(String[] args) {  Scanner sc = new Scanner(System.in);  List<String> list = new ArrayList<String>();  System.out.println("Enter several lines:");  while (sc.hasNextLine()) {   list.add(sc.nextLine());  }  System.out.println("\nEnter another line:");  String str = sc.nextLine();  // 上の位置で例外(NoSuchElementException)発生  System.out.println("Done!"); } 2、BufferedReaderを使用 // 例外は発生しないが、二回目の入力が不可 public static void main(String[] args) {  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  List<String> list1 = new ArrayList<String>();  System.out.println("Enter several lines:");  String str;  try {   while ((str = br.readLine())!=null) {    list1.add(str);   }   System.out.println("\nEnter another line:");   String line = br.readLine();   // ↑の位置でキーを何も押していないのに勝手にlineにnullが挿入され、   // Done!が出力される   System.out.println("Done!");  } catch (IOException e) { e.printStackTrace(); } } アドバイス宜しくお願いします。

    • ベストアンサー
    • Java
  • javaの超初心者です。ご教授いただけたら幸いです。

    javaの超初心者です。ご教授いただけたら幸いです。 ある書籍を元にやっているのですが、演習に答えがなく、わからないためその問題をお願い致します。 2桁の整数値(10~99)を当てさせる数当てゲームを作成せよ。という問題です。 下記は少しやってみました。 import java.util.Random; import java.util.Scanner; class Kazuate99 { public static void main(String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in);    int no = rand.nextInt(); ← ここがたぶん違う System.out.println("数当てゲーム開始!!"); System.out.println("10~99の数を当てて下さい。"); int x; // プレーヤが入力した数 do { System.out.print("いくつかな : "); x = stdIn.nextInt(); if (x > no) System.out.println("もっと小さな数だよ。"); else if (x < no) System.out.println("もっと大きな数だよ。"); } while (x != no ); System.out.println("正解です。"); } } 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 3つの値の中間値を求める

    import java.util.Scanner; //このコードをどう修正したらいいですか? class Sample7_3{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数a:");int a = std.nextInt(); System.out.print("整数b:");int b = std.nextInt(); System.out.print("整数c:");int c = std.nextInt(); int med = 0; if(a<b) else if(a<c)med = c; else if(b<c)med = b; System.out.println("中間値は"+med+"です。"); } }

  • javaで公約数の個数を求めるプログラミング

    javaで二つの数字を入れるとその公約数と、その公約数の個数を表示してくれるプログラムを作りたいです。 公約数を表示してくれるプログラムは多分作れたのですが、公約数の個数を表示してくれるプログラムの作り方がどうしてもわかりません。 aを入力してください:12 bを入力してください:18 aとbは公約数として1をもちます。 aとbは公約数として2をもちます。 aとbは公約数として3をもちます。 aとbは公約数として6をもちます。 よって,aとbは公約数を4個もちます。 というように表示されるようにしたいです。 個数を求めるプログラムを教えてくださいm(_ _)m 以下が私の作った公約数を求めるプログラムです。 import java.util.Scanner; class Test{ public static void main(String args[]) { Scanner sc = new Scanner (System.in); System.out.println("aとbの各公約数と、その全体の個数を調べます。"); System.out.print("aを入力してください:"); int a=sc.nextInt(); System.out.print("bを入力してください:"); int b=sc.nextInt(); if(a<b){ for(int i=1;i<=a;i++) if((a%i==0)&&(b%i==0))System.out.println(a+"と"+b+"は公約数として"+i+""+"をもちます"); } if(b<a){ for(int i=1;i<=b;i++) if((a%i==0)&&(b%i==0))System.out.println(a+"と"+b+"は公約数として"+i+""+"をもちます"); } } }

    • ベストアンサー
    • Java
  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数値:");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }