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

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

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

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

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

2回答

2690閲覧

独自例外クラスをメインメソッドでキャッチしてメッセージを表示したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2021/05/22 03:00

編集2021/05/22 03:25

前提・実現したいこと

現在、Javaの演習問題に取り組んでいます。

ProcessGettingArrayListDataクラスでIndexOutBoundsExceptionをキャッチして、SampleExceptionを投げる処理を記述しました。そして、メインメソッドでSampleExceptionをキャッチしてエラーメッセージを表示したいです。
上記の内容は問題文で決められているので、回りくどい処理をしていると思いますが、必ず守らなければいけません。

*SampleExeceptionは独自の例外クラスです。

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

ArrayListのサイズを超えた6以降の数字を入力してもnullと表示され、ArrayListのサイズを超えた場合のエラーメッセージが表示されません。メインメソッドでSampleExceptionをキャッチしてエラーメッセージを表示したいのですが、修正すべき点がわからないのでご教授ください。

該当のソースコード

java

1// 例外処理を行うためにSampleExceptionクラスをインポート 2import common.SampleException; 3 4// 処理クラスの結果を表示 5public class DisplayResultOfProcessingClass { 6 7 public static void main(String[] args) { 8 // ProcessGettingArrayListDataをインスタンス化 9 ProcessGettingArrayListData processGettingArrayListData = new ProcessGettingArrayListData(); 10 11 try { 12 processGettingArrayListData.getCountry(args[0]); 13 } 14 15 catch(SampleException e) { 16 System.out.println(e.getMessage()); 17 } 18 } 19}

Java

1// 例外処理を行うためにSampleExceptionクラスをインポート 2import common.SampleException; 3// ArrayListを取り扱うためにArrayListクラスをインポート 4import java.util.ArrayList; 5 6public class ProcessGettingArrayListData { 7 8 // ArrayListクラスをインスタンス化 9 ArrayList<String> countries = new ArrayList<String>(); 10 11 // ProcessGettingArrayListDataのコンストラクタを作成 12 public ProcessGettingArrayListData() { 13 14 // ArrayListの一覧 15 countries.add("ロシア"); 16 countries.add("ベトナム"); 17 countries.add("インド"); 18 countries.add("アメリカ"); 19 countries.add("フランス"); 20 } 21 22 public void getCountry(String firstParameter) throws SampleException { 23 // 例外が発生しうる文 24 try { 25 // 第一パラメータを数値に変換 26 int figureOfParameter = Integer.parseInt(firstParameter); 27 // 入力された数値に対応するArrayListの要素を表示 28 System.out.println(countries.get(figureOfParameter - 1)); 29 } 30 // 例外発生時に実行される文 31 catch(IndexOutOfBoundsException e) { 32 // SampleExceptionクラスをスローする 33 throw new SampleException("E422"); 34 } 35 } 36}

java

1package common; 2import java.io.FileInputStream; 3import java.util.Properties; 4 5//演習問題 Exceptionクラス 6 7public class SampleException extends Exception { 8 9 //private static final long serialVersionUID = 1L; 10 11 /** エラーメッセージ */ 12 private String errorMessage = ""; 13 14 /** エラーコード */ 15 private String errorCode = ""; 16 17 /** 18 * コンストラクタ 19 * @param 引数なし 20 */ 21 public SampleException() { 22 super(); 23 24 } 25 26 /** 27 * コンストラクタ<BR> 28 * 引数で受け取ったエラーコードでプロパティファイルを検索し、<BR> 29 * errorMessageにエラーメッセージをセットする。<BR> 30 * エラーコードの指定例は「E001」など 31 * 32 * @param errorCode エラーメッセージコード 33 */ 34 public SampleException(String errorCode) { 35 super(); 36 this.errorCode = errorCode; 37 readProperties(); 38 } 39 /** 40 * コンストラクタ<BR> 41 * エラーコードを指定したコンストラクタと同様<BR> 42 * スーパークラスのThrowableを渡したコンストラクタを呼び出す 43 * 44 * @param errorCode エラーメッセージコード 45 * @param t エラーメッセージコード 46 */ 47 public SampleException(String errorCode, Throwable t) { 48 super(t); 49 this.errorCode = errorCode; 50 readProperties(); 51 } 52 53 /** 54 * エラーコード取得 55 * @return errorCode エラーコード 56 */ 57 public String getErrorCode() { 58 return errorCode; 59 } 60 61 /** 62 * エラーメッセージ取得 63 * @return errorMessage エラーメッセージ 64 */ 65 public String getErrorMessage() { 66 return errorMessage; 67 } 68 69 // プロパティファイルロード処理 70 private void readProperties() { 71 Properties properties = new Properties(); 72 73 try { 74 //プロパティファイルロード 75 properties.load(this.getClass().getClassLoader().getResourceAsStream("Messages.properties")); 76 //メッセージ取得 77 errorMessage = properties.getProperty("error.messages." + errorCode); 78 } catch (Exception e) { 79 e.printStackTrace(); 80 } 81 82 } 83 84} 85

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

*SampleExceptionクラスに手を加えることはできません。

エラーコード表
error.messages.E422=配列の長さを超えた参照です。
error.messages.E423=数字以外の文字が入力されました。
error.messages.E011=パラメータの入力方法にエラーがあります。

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

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

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

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

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

y_waiwai

2021/05/22 03:13

できません、とはなにがどういうふうになってできないんでしょうか。 そして、それがどうなればいいのでしょう。
退会済みユーザー

退会済みユーザー

2021/05/22 03:25

申し訳ございません。 修正しました。
dodox86

2021/05/22 03:28

> ArrayListのサイズを超えた6以降の数字を入力してもnullと表示され、実現したいことができません。 軽く試してみたところ、質問者さんの書かれている状況とは違ったことになりました。 ここから>>>> C>java DisplayResultOfProcessingClass Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 at DisplayResultOfProcessingClass.main(DisplayResultOfProcessingClass.java:12) <<<<ここまで Windows10上でJava SE11で実行した例ですが、質問者さんの場合、エラーの内容などを省略せず、実行時のコマンドラインやJavaのバージョンなど詳細を示した方が良いと思います。(その際は、質問文中に追記で修正してください)
guest

回答2

0

ベストアンサー

SampleExceptionクラスのgetErrorMassage()をDisplayResultOfProcessingClass の出力コードに記述していなかったため、エラーメッセージが出力されていませんでした。

System.out.println(getMessage()); → System.out.println(getErrorMassage());

些細なミスによって、皆様の貴重な時間を割いてしまって申し訳ございませんでした。
たくさんのアドバイスありがとうございました。

投稿2021/05/22 04:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

java

1 catch(SampleException e) { 2 System.out.println(e.getMessage()); 3 }

getMessage()は、例外生成時のコンストラクタで渡されたものを返すメソッドです。SampleExceptionクラスで、コンストラクタでメッセージを渡しているものがないため、nullになります。

投稿2021/05/22 03:24

swordone

総合スコア20669

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問