###前提・実現したいこと
javaで四捨五入のプログラムを作っています。キーボードから四捨五入する値を入力して、四捨五入する位を入力すると結果が表示され、’n’を入力すると終了し、Enterやその他のキーが入力されると四捨五入する位を再びたずねて、値を入力すると四捨五入してくれるプログラムを作っています。
###発生している問題・エラーメッセージ
1回目は正常に作動し、'n'を入力すると終了しますが、Enterや他のキーを入力すると 四捨五入する位を再びたずねて何も入力できないままエラーメッセージが表示されます。 以下が実行例です。(”nを入力すると終了します”のあとはEnterを入力した) C:\Users\●●●●●\プログラミング>java RoundUp 四捨五入したい数を入力してください 36781.72 どの位を四捨五入しますか? 例)10000, .., 10, 1, 0.1, .., 0.0001 0.1 四捨五入した結果 36782.0 nを入力すると終了します どの位を四捨五入しますか? 例)10000, .., 10, 1, 0.1, .., 0.0001 Exception in thread "main" java.lang.NumberFormatException: empty String at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at sun.misc.FloatingDecimal.parseDouble(Unknown Source) at java.lang.Double.parseDouble(Unknown Source) at RoundUp.main(RoundUp.java:22)
###該当のソースコード
import java.io.*; class RoundUp { public static void main (String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("四捨五入したい数を入力してください"); String str = br.readLine(); int repeat = 0; do{ // 変数初期化(2回目以降) double x = Double.parseDouble(str); double p = 0; // 四捨五入する位の入力と入力判定 do{ System.out.println("どの位を四捨五入しますか?"); System.out.println("例)10000, .., 10, 1, 0.1, .., 0.0001"); String str2 = br.readLine(); double o = Double.parseDouble(str2); double n = 0.0001; for(int i = 0; i < 9; i++){ if(o == n && o > 0){ p = o; break; } n = n*10; } if(p == 0){ System.out.println("例にならって入力してください"); } }while(p == 0); // 正負による四捨五入の処理の場合分け int s = 1; if(x < 0) s = -1; // 四捨五入の処理 x = (x + 5*p*s)/(10*p); int y = (int)x; double z = y*(10*p); // 結果表示 System.out.println("四捨五入した結果"); System.out.println(z); // nを入力で終了 Enterや他のキーが入力されると四捨五入する位を再指定させ再実行するようにしたい System.out.println("nを入力すると終了します"); repeat = br.read(); }while(repeat != 'n'); } }
###試したこと
System.out.println("nを入力すると終了します");
repeat = br.read();
の2行を消しEnterを入力すると再び四捨五入する位をたずねて、値を入力すると四捨五入してくれるがもう終了したくても終了できない。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答2件
あなたの回答
tips
プレビュー