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

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

新規登録して質問してみよう
ただいま回答率
87.20%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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

解決済

nullを読み込んだ時、別の文字列を表示させたい

taka0145
taka0145

総合スコア7

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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

1回答

0評価

1クリップ

390閲覧

投稿2022/01/21 16:17

前提・実現したいこと

・前提
機能としては、主に情報の入力と情報の表示の2つです。
メニュー1では、codeとnameを入力させて、Informationをnewし、mapに入れて、ファイルに書き込んでいます。
メニュー2では、ファイルから読み取ったcode,nameを表示、それに対応するnumberを入力させ、mapに入れ、ファイルに書き込んでいます。
メニュー3ではファイルを読み込み、表示させています。
メニュー1では、numberを入力しないのでnullをセットしているのですが、一度終了させて、
メニュー3を実行しようとすると、nullを読み込めずエラーが出てしまいます。

・実現したいこと
numberを入力していない場合は、「未入力」と表示させたいです。

発生している問題・エラーメッセージ

Exception in thread "main" java.lang.ExceptionInInitializerError at Main.main(Main.java:26) Caused by: java.lang.NumberFormatException: Character n is neither a decimal digit number, decimal point, nor "e" notation exponential mark. at java.base/java.math.BigDecimal.<init>(BigDecimal.java:511) at java.base/java.math.BigDecimal.<init>(BigDecimal.java:394) at java.base/java.math.BigDecimal.<init>(BigDecimal.java:827) at Filer.getInventory(Filer.java:24) at EntryData.<clinit>(EntryData.java:19) ... 1 more

該当のソースコード

java

import java.math.BigDecimal; public class Information { private String code; private String name; private BigDecimal number ; public Information(String code, String name, BigDecimal number){ this.code = code; this.name = name; this.number = number; } public String getCode() { return this.code; } public String getName() { return this.name; } public BigDecimal getNumber() { return this.number; } public void setCode(String code) { this.code = code; } public void setName(String Name) { this.name = name; } public void setNumber(BigDecimal number) { this.number = number; } }

java

import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; class Main { public static void main(String[] args) throws IOException { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); boolean end = false; while (!end) { try { System.out.println(""); System.out.println("<<メニュー>>"); System.out.println("1:code,name入力 \n2:number入力 \n3:表示 \n4:終了"); System.out.print(">"); int choice = Integer.parseInt(input.readLine()); System.out.println(""); switch (choice) { case 1: EntryData.enter(); break; case 2: EntryData.input(); break; case 3: File.show(); break; case 4: end = true; break; } } catch (IOException e) { System.out.println("指定された値を入力してください。"); } catch (NumberFormatException e) { System.out.println("数字を入力してください。"); } } } }

java

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.ArrayList; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; class EntryData { public static HashMap<String, Information> stockMap = Filer.getInventory(); public static void enter() throws IOException { boolean finish = false; BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); System.out.print("codeを入力してください\n>"); String code = input.readLine(); System.out.print("nameを入力してください\n>"); String name = input.readLine(); Information information = new Information(code, name, null); stockMap.put(information.getCode(),information); filewrite(); } public static void input() throws IOException { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); for (String key : stockMap.keySet()) { System.out.println("code:" + key); System.out.println("name:" + stockMap.get(key).getName()); System.out.print("■numberを入力してください\n>"); BigDecimal number = new BigDecimal(input.readLine()); stockMap.get(key).setNumber(number); } filewrite(); } public static void filewrite() { try (PrintWriter dataFile = new PrintWriter(new BufferedWriter (new OutputStreamWriter(new FileOutputStream("StockData.csv"), "UTF-8")))) { for(Map.Entry<String, Information> stock : stockMap.entrySet()) { dataFile.println(stock.getValue().getCode() + "," + stock.getValue().getName() + "," + stock.getValue().getNumber()); } } catch (FileNotFoundException e) { System.out.println("ファイルがみつかりませんでした。確認してください。"); return; } catch (IOException e) { System.out.println("指定された値を入力しているか確認してください。"); return; } } }

java

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; public class Filer { public static HashMap<String, Information> getInventory() { HashMap<String, Information> map = new HashMap<String, Information>(); String text; try(BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("StockData.csv"), "UTF-8"))) { while((text = br.readLine()) != null) { String[] st = text.split(",",-1); BigDecimal st2 = new BigDecimal(st[2]); Information information = new Information(st[0], st[1], st2); map.put(information.getCode(),information); } } catch (FileNotFoundException e) { System.out.println("指定されたファイルが見つかりません。"); } catch (IOException e) { System.out.println("指定された値を入力しているか確認してください。"); } return map; } public static void show() { String line; try (BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream("StockData.csv"), "UTF-8"))) { while ((line = file.readLine()) != null) { String[] data = line.split(",", 0); for (String elem : data) { System.out.println(elem); } } } catch (FileNotFoundException e) { System.out.println("指定されたファイルが存在するか確認してください。"); } catch (IOException e) { System.out.println("値が入力されているか確認してください。"); } } }

試したこと

メニュー1でnull以外をセットしようとしましたが、エラーが出ます。
また、numberはBigDecimal型なので「未入力」という文字列はセットできず、手詰まりの状態です。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2022/01/21 16:44

バグがあり、コンパイルが通りません。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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