前提・実現したいこと
Eclipseを使用
実現したいことは下記の通りですが、Ctr+ZでNullpointerExceptionを発生させないように記述したい
-コンソールから複数の数値(整数・実数)を受け取って、入力された数値の積を表示。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.NullPointerException at test.assignment3.main(assignment3.java:27)
該当のソースコード
Programming
1/** 2 * Main method の説明 3 * 入力された値を受けて積を求める 4 * 空入力で終了 5 * @param 実行時引数 6 */ 7 8import java.io.BufferedReader; 9import java.io.IOException; 10import java.io.InputStreamReader; 11 12 13 14 15 16 17 18public class assignment3{ 19 public static void main(String[] args) { 20 try { 21 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//入力 22 double product = 1;//initial value 23 String str; 24 while (!(str = br.readLine()).isEmpty())//入力された値が空なら入力終了 25 try { 26 product *= Double.valueOf(str);//受け取った値を数値(Double type)に変換して変数"product"に代入 27 } catch (NumberFormatException e) {//数値以外の入力なら例外発生 28 System.out.println("数値を入力してください");//その例外が発生したら出力 29 } 30 str = String.format("%,.16g", product);//積算された値をString.format methodで編集してカンマ区切り 31 if (str.indexOf('.') >= 0)//search index of "." 32 str = str.replaceAll("0*$", "").replaceAll("\.$", ""); 33 System.out.println("入力された値の積 : " + str); 34 } catch (IOException e) { 35 System.out.println("入出力例外が発生しました"); 36 } 37 } 38 39 40}
試したこと
以下の通りに二つ試しました。
1:これに変更して記載してみたが複数の値の入力が出来なくなるため却下(入力された値の積算ができないから)
while (true) {
str = br.readLine();
if (str == null || str.isEmpty()) break;
2:数値以外の入力したら例外処理であるNumberformatExceptionで例外処理できないから却下
while ((str = br.readLine()) != null && !str.isEmpty());
補足情報
※コードを見やすくするために必ずWhile "{}"で囲みたい。
どなたかご存知あれば、お知恵をおかしください。
もっと適切でシンプルにかけないですかね?!!!