前提・実現したいこと
現在、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=パラメータの入力方法にエラーがあります。
回答2件
あなたの回答
tips
プレビュー