前提・実現したいこと
お知恵をおかしください。
前提・実現したいこと
Java初心者です。Eclipseで実装しています。
Java でコンソールから複数の数値(整数・実数)を受け取って、入力された数値の積を表示する
<分からないこと>
文字列を数値に変換して前回の数値と今回入力された数値の積を出す記述方法や
※入力はscannar以外を使用して必ずIOExceptionを発生させる
<仕様>
・数値以外が入力された場合は、「数値を入力してください」を表示する
・入出力例外が発生した場合は、「入出力例外が発生しました」を表示して、処理を終了する
・改行のみが入力された時点で入力を終了する
・演算の結果として、「入力された値の積 :(演算結果)」を表示する
・積算は「*」オペレータを使用し、double型の精度まで表示する
・演算結果は、3桁カンマ編集して表示する
・入力が1つもない場合の演算結果は「1」とする
■ 出力例
積を求める数値を入力してください
13
9.3
a
数値を入力してください
32
6.7
入力された値の積 : 25,920.96
該当のソースコード
言語名JAVA
import java.io.*;
public class Exercise3 {
public static void main(String[] args) { // TODO Auto-generated method stub int x; System.out.println("入力された値の積 ::"); //keyboard inputs InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); try { String buf; while(true) { buf = br.readLine();//Arise an IOException intentionally if(buf.contentEquals("\n"))//if the value is the only new line , the input wraps up break; //if it is a blank, the result is "1" if(buf.contentEquals("")) System.out.println(buf); } try {//Exception handling x = Integer.parseInt(buf);//arise an Exception if input value wasn't number }catch (NumberFormatException e) { x = 0; System.out.println("数値を入力してください"); } }catch(IOException e) {//handle the exception and print line the stings below System.out.println("入出力例外が発生しました"); } }
}
追記:
現在のソースコード:
while (!(str = br.readLine()).isEmpty())//入力された値が空なら入力終了
try {
product *= Double.valueOf(str);//受け取った値を数値(Double type)に変換して変数"product"に代入
} catch (NumberFormatException e) {//数値以外の入力なら例外発生
System.out.println("数値を入力してください");//その例外が発生したら出力
}
発生している問題・エラーメッセージ
java.lang.NullPointerException
原因:Ctr+Zを押して入力終了をさせたら上記のエア-がかえった。
試したこと
while (true) {
str = br.readLine();
if (str == null || str.isEmpty()) break;
にすると、今度は複数の値を読み込まれません。
while ((str = br.readLine()) != null && !str.isEmpty());
⇒こっちは、aを入れても例外処理されないし、ctr+Z押して終了させると、やはりNullPointerExceptionが発生しますね
回答2件
あなたの回答
tips
プレビュー