前提・実現したいこと
二次元配列にnullを格納して、その二次元配列の要素を引数としてエラーなくメソッドを呼び出したい。
発生している問題・エラーメッセージ
二次元配列にnullを格納し、メソッドを呼び出すとjava.lang.NullPointerExceptionが返されてしまう。
[createRecordメソッド] ケースNo1 ケースNo2 Exception in thread "main" java.lang.NullPointerException at com.ams.work210.Work210Test.main(Work210Test.java:33)
該当のソースコード
java
1package com.ams.work210; 2 3public class Work210Test { 4 public static void main(String[] args) { 5 Work210 work210 = new Work210(); 6 System.out.println("[createRecordメソッド]"); 7 8 String[][] record2 = {null, {}, { "X" }, { "X", "X", "X", "X" }, { "X", "X", "X" }, 9 { "4903110006770", "毎朝のパン", "138" }, { "4903110006770", null, "138" }, 10 { "4903110006770", "毎朝の食パン", null } }; 11 12 System.out.println("ケースNo1"); 13 String eMessage = ""; 14 15 ProductBean productBean = new ProductBean(); 16 17 18 for (int i = 0; i < record2.length; i++) { 19 eMessage = ""; 20 System.out.println("ケースNo" + (i + 2)); 21 22 for (int j = 0; j < record2[i].length; j++) { 23 System.out.println("入力値:" + record2[i][j]); 24 } 25 26 try { 27 productBean = work210.createRecord(record2[i]); 28 } catch (IllegalArgumentException e) { 29 eMessage = e.getMessage(); 30 } 31 32 if (eMessage.length() != 0) { 33 System.out.println("結果:" + eMessage + "\n"); 34 } else { 35 System.out.println("結果:" + productBean + "\n"); 36 } 37 38 } 39 } 40} 41
java
1package com.ams.work210; 2 3import java.math.BigDecimal; 4 5public class Work210 { 6 7 public ProductBean createRecord(String[] record) throws IllegalArgumentException { 8 9 if (record == null) { 10 throw new IllegalArgumentException("引数がNULLです。"); 11 } 12 13 if (record.length != 3) { 14 throw new IllegalArgumentException("引数の要素数が不正です。"); 15 } 16 17 try { 18 if (record != null) { 19 Integer.parseInt(record[2]); 20 } 21 } catch (IllegalArgumentException e) { 22 throw new IllegalArgumentException("引数の第3要素が数値に変換できません"); 23 } 24 25 ProductBean productBean = new ProductBean(); 26 String code = record[0]; 27 String name = record[1]; 28 String keepPrice = record[2]; 29 30 productBean.setCode(code); 31 productBean.setName(name); 32 33 if (record[2] == null) { 34 productBean.setPrice(null); 35 return productBean; 36 37 } else { 38 BigDecimal price = new BigDecimal(keepPrice); 39 productBean.setPrice(price); 40 return productBean; 41 42 } 43 44 } 45} 46
java
1package com.ams.work210; 2 3import java.math.BigDecimal; 4 5public class ProductBean { 6 private String code = ""; 7 private String name = ""; 8 private BigDecimal price = new BigDecimal(0); 9 10 11 public ProductBean() { 12 }; 13 14 public String getCode() { 15 return code; 16 } 17 18 public void setCode(String code) { 19 this.code = code; 20 } 21 22 public String getName() { 23 return name; 24 } 25 26 public void setName(String name) { 27 this.name = name; 28 } 29 30 public BigDecimal getPrice() { 31 return price; 32 } 33 34 public void setPrice(BigDecimal price) { 35 this.price = price; 36 } 37 38 @Override 39 public String toString() { 40 return "code=\"" + code + "\"\n" + "name=\"" + name + "\"\n" + "price=" + price; 41 } 42 43} 44
試したこと
二次元配列にnullを格納せずに以下のように書いた場合は、エラーなく実行出来ました。けれどなぜエラーなく実行できたのかわかりません。
String[] record1 = null;
String[][] record2 = {{}, { "X" }, { "X", "X", "X", "X" }, { "X", "X", "X" },
{ "4903110006770", "毎朝のパン", "138" }, { "4903110006770", null, "138" },
{ "4903110006770", "毎朝の食パン", null } };
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/18 05:54