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

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

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

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

Q&A

解決済

1回答

10166閲覧

java Exceptionのエラーについて

RinT_hinabita39

総合スコア28

Java

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

0グッド

0クリップ

投稿2017/04/21 14:09

###前提・実現したいこと
このページの問題が解きたいです。
https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2315

概要は、何個かの文字(アルファベットもしくは記号)に報酬金が指定されてあり、
新聞記者は、自分の記事の中に報酬の対象となる文字が1回表れる度に、その文字に対応した額が加算され、
そのようにして計算した時の合計額が報酬としてもらえる、という変わった会社が舞台となっています。

1行目の入力が試行回数(記事の数)、2行目の入力が1文字のアルファベットまたは記号と数字の組を何個入力するか、
その後、2行目で入力した行数だけ文字と数字の組を入力
その後、英文(記事)の行数を入力し、最後に英文を入力します。

サンプルの入力とその時の出力は以下の通りです。

1 7 a 3 // 記事中にaが1回表れる度に3セントもらえる W 10 // 記事中にWが1回表れる度に10セントもらえる A 100 , 10 k 7 . 3 I 13 7 ACM International Collegiate Programming Contest (abbreviated as ACM-ICPC or just ICPC) is an annual multi-tiered competition among the universities of the world. The ICPC challenges students to set ever higher standards of excellence for themselves through competition that rewards team work, problem analysis, and rapid software development. From Wikipedia.
3.74$

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

方針はなんとなく立っているのですが、ちょっと書いてコンパイルして実行を繰り返すうちに、
問題自体とはあまり関係ないですが、以下のような壁に突き当たり、全く進まなくなってしまいました。

今までは入力の読み込みにはScannerを使っていたのですが、
今回は行丸ごと読んだ方がよさそうだと思ったので、readLineを使ってみました。
http://www1.bbiq.jp/takeharu/java114.html ←このサイトにわかりやすく使い方が載っていたので真似してみたのですが、
これをそのまま使うと

エラー: 例外FileNotFoundExceptionは報告されません。スローするには、捕捉または宣言する必要があります

と出てきたので、catch(FileNotFoundException e)を付け足してみたところ、

Newspaper.java:49: エラー: 例外FileNotFoundExceptionはすでに捕捉されています } catch(FileNotFoundException e) { ^ Newspaper.java:8: エラー: 例外FileNotFoundExceptionは報告されません。スローする には、捕捉または宣言する必要があります FileReader file = new FileReader(args[0]); ^ エラー2個

という、「既に捕捉されています」と「補足する必要があります」という2つの相反するエラーが出てきてしまいました。
一体何がおかしいのでしょうか?

###該当のソースコード

java

1import java.io.*; 2import java.util.Scanner; 3import java.util.InputMismatchException; 4 5class Newspaper { 6 public static void main (String[] args) { 7 Scanner scan = new Scanner(System.in); 8 FileReader file = new FileReader(args[0]); 9 BufferedReader br = new BufferedReader(file); 10 11 String output[] = new String[1000]; 12 int testcase = scan.nextInt(); 13 14 try { 15 for(int i=0; i<testcase; i++) { 16 int n = scan.nextInt(); 17 String letter[] = new String[n]; 18 int value[] = new int[n]; 19 20 for(int j=0; j<n; j++) { 21 letter[j] = scan.next(); 22 value[j] = scan.nextInt(); 23 } 24 25 int line = scan.nextInt(); 26 for(int j=0; j<line; j++) { 27 String str = br.readLine(); 28 System.out.println(str); 29 30 //まだ途中です 31 32 } 33 34 testcase++; 35 } 36 37 br.close(); 38 39 for(int i=0; i<testcase; i++) { 40 System.out.println(output[i]); 41 } 42 43 } catch(InputMismatchException e) { 44 System.out.println("Input must be type int."); 45 System.exit(1); 46 } catch(IOException e) { 47 System.out.println("Exception :" + e); 48 System.exit(1); 49 } 50// エラーを受けてここを追加しました その後、上記にある矛盾のようなエラーメッセージが出てきました 51 catch(FileNotFoundException e) { 52 System.out.println("Exception :" + e); 53 System.exit(1); 54 } 55 } 56} 57

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

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

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

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

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

guest

回答1

0

ベストアンサー

ここでcatchすべきは、tryブロックの前にあるFileReaderのコンストラクタからスローされる例外です。このコンストラクタを囲むtryブロックが必要です。
今あるtry-catchに続けた際に「すでに捕捉されています」と出るのは、すでにその前にFileNotFoundExceptionの親クラス型IOExceptionを捕捉しているため、そこに到達することがないためです。

投稿2017/04/21 14:14

編集2017/04/21 14:16
swordone

総合スコア20649

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

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

RinT_hinabita39

2017/04/21 18:15

FileNotFoundExceptionはIOExceptionの子クラスだったんですね… あと、恥ずかしながら今までtry文はcatchと一緒に使うという風にしか理解していなかったので、 どこでtryを置くべきかなどはわかっていませんでした。大変勉強になりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問