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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Q&A

解決済

2回答

1751閲覧

Javaでショッピングのプログラムを作っています。コンストラクターとクラスのインスタンス化をする際にエラーが出てしまいます。

kisese

総合スコア2

Java

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

0グッド

0クリップ

投稿2021/06/18 06:07

編集2021/06/18 23:37

前提・実現したいこと

shoppingというシステムを作っています。

shopping.javaの6行目の
Stand stand = new Stand();
に以下のエラーメッセージが発生しています。
エラーを解決したいです。

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

Exception in thread "main" java.lang.Error: Unresolved compilation problem: デフォルト・コンストラクターは、暗黙的スーパー・コンストラクターによってスローされる例外型 IOException を処理できません。明示的コンストラクターを定義する必要があります

該当のソースコード

Shoppingjava

1import java.io.IOException; 2 3public class Shopping { 4 5 Calculation calculation = new Calculation(); 6 Stand stand = new Stand(); 7 8 public static void main(String[] args) { 9 try { 10 Shopping sh = new Shopping(); 11 sh.exec(args); 12 } catch(Exception e) { 13 e.printStackTrace(); 14 } 15 } 16 17 private void exec(String[] args)throws IOException { 18 try { 19 stand.prepare(); 20 toOrder(args); 21 } catch(Exception e) { 22 e.printStackTrace(); 23 24 } 25 26 private void toOrder(String[] args) { 27 try { 28 for (int i = 0; i < args.length; i +=2 ) { 29 String code = args[i]; 30 String num = args[i + 1]; 31 Item oneItem = stand.order(code, num); 32 calculation.buy(oneItem, num); 33 } 34 calculation.pay(); 35 } catch(Exception e) { 36 e.printStackTrace(); 37 } 38 } 39} 40 41

Itemjava

1public class Item { 2 3 private String codes = null; 4 5 private String name = null; 6 7 private String price = null; 8 9 private String stock = null; 10 11 public Item(String codes, String name, String price, String stock) { 12 this.codes = codes; 13 this.name = name; 14 this.price = price; 15 this.stock = stock; 16 } 17 18 public String getCodes() { 19 return codes; 20 } 21 22 public String getName() { 23 return name; 24 } 25 26 public String getPrice() { 27 return price; 28 } 29 30 public boolean stock(String num) { 31 int order = Integer.parseInt(num); 32 int stock = Integer.parseInt(this.stock); 33 return order <= stock; 34 } 35}

Calculationjava

1public class Calculation { 2 3 private int sum; 4 5 public void buy(Item item,String num){ 6 int price = Integer.parseInt(item.getPrice())*Integer.parseInt(num);; 7 sum += price; 8 } 9 10 public void pay() { 11 System.out.println(sum + "円"); 12 } 13} 14

Standjava

1import java.io.BufferedReader; 2import java.io.FileNotFoundException; 3import java.io.FileReader; 4import java.io.IOException; 5import java.util.HashMap; 6import java.util.Map; 7 8public class Stand { 9 10 public Map<String, Item> items = new HashMap<String, Item>(); 11 12 public Stand() throws IOException { 13 try { 14 BufferedReader csvFile = new BufferedReader(new FileReader("shop.csv")); 15 readFile(csvFile); 16 csvFile.close(); 17 } catch (FileNotFoundException e) { 18 System.out.println("ファイルがありません"); 19 throw e; 20 } 21 } 22 23 private void readFile(BufferedReader csvFile) throws IOException { 24 String line; 25 while ((line = csvFile.readLine()) != null) { 26 String datas[] = line.split(","); 27 datas[0] = Integer.parseInt(datas[0]); 28 Item item = new Item(datas[0], datas[1], datas[2], datas[3]); 29 items.put(datas[0], item); 30 } 31 } 32 } 33 34 35 public Item order(String code, String num) { 36 Item item = items.get(code); 37 if (item.Stock(num)) { 38 return item; 39 } 40 return null; 41 } 42}

考えたこと

this()やsuper()を記入してみましたが、上手くいきませんでした。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Standのコンストラクタで検査例外が発生するので、それに対応する必要があります。

簡単に修正するなら
Shoppingにコンストラクタを追加して、Standのnewを、コンストラクタ内で行う。
Standで発生するIOExceptionは、Stand同様にthrows節を追加する。

java

1 Stand stand;// = new Stand(); 2 3 public Shopping() throws IOException { 4 stand = new Stand(); 5 }

または、StandでIOExceptionを発生させないようにするように修正する
※IlligalStateに丸めてますが、ようはRuntimeExceptionに丸めればオーケー
※※独自例外を作成するのもあり

java

1public Stand() { 2 try { 3 BufferedReader csvFile = new BufferedReader(new FileReader("shop.csv")); 4 readFile(csvFile); 5 csvFile.close(); 6 } catch (FileNotFoundException e) { 7 System.out.println("ファイルがありません"); 8 throw new IllegalStateException(e); 9 } catch (IOException e) { 10 throw new IllegalStateException(e); 11 } 12}

あとは、readFileなどをコンストラクタで呼ばないで、Stand#readみたいにするのもいいかなと思います。

投稿2021/06/18 07:13

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kisese

2021/06/18 13:33

shoppingコンストラクターを作り無事エラーが解決できました!! ご教授いただきありがとうございましたm(__)m
guest

0

Look forward to your program. You can research usps tracking number, it's very good, it will help you a lot

投稿2023/09/14 10:27

alexiaamber

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問