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

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

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

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

Q&A

2回答

2621閲覧

住所検索のプログラムについて検索結果が出力されない

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2017/06/15 08:46

###前提・実現したいこと
いつもお世話になっています。
以前こちらで質問させていただいた、CSVファイルから住所検索を行うプログラムに一旦XMLファイルに変換後、検索するという機能を追加し実装を行っています。(AddressMap,ZipCode,Addressというクラスを作成済)

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

一通りソースを書いてみたのですが、 引数に七桁の数字を入力するも検索結果が出力されない状況です。 住所検索の処理の部分が知識不足で基本的な構文がおかしいのではないかと思っているのですが、自身で解決に至らず。。。 よろしければ問題点と合わせて、例としてソースもお教え頂けると幸いです。

###該当のソースコード(Mainクラス)

Java

1package Practice; 2 3import java.io.FileInputStream; 4import java.io.FileNotFoundException; 5import java.io.FileOutputStream; 6import java.io.IOException; 7import java.nio.charset.Charset; 8import java.nio.file.Files; 9import java.nio.file.Paths; 10import java.util.HashMap; 11import java.util.List; 12import java.util.Map; 13 14import javax.xml.bind.JAXB; 15 16/** 17 * 演習 CSV形式のファイルを読み取る 18 * XML形式のファイルへ変換 19 */ 20public class ConvertCsvToXml { 21 22 static final String inputCsvFileName = "data/40FUKUOK.CSV"; 23 static final String outputXmlFileName = "data/40FUKUOK.XML"; 24 25 public static void main(String[] args) { 26 List<String> readLineList = null; 27 28 try { 29 readLineList = Files.readAllLines(Paths.get("inputCsvFileName"), Charset.forName("SJIS")); 30 } catch (FileNotFoundException e) { 31 return; 32 } catch (IOException e) { 33 return; 34 } 35 36 // 自インスタンス生成 37 ConvertCsvToXml cctx = new ConvertCsvToXml(); 38 39 // CSVを読み込んだList<String>からAdressMap生成 40 AddressMap readAddressMap = cctx.readCsvFile(readLineList); 41 42 // AddressMapの内容をXMLファイルに保存 43 cctx.writeXmlFile(readAddressMap, outputXmlFileName); 44 45 // XMLから読み込んだデータをAddressMapに格納 46 AddressMap readAddressMapXml = cctx.readXmlFile(outputXmlFileName); 47 48 // 住所検索処理 49 String result = cctx.searchAddress(args[0],readAddressMapXml); 50 System.out.println("result"); 51 52 } 53 54 /** 55 * CSVファイルを読込 56 * AddressMapをメインに返す 57 * @param readLineList 58 * @return 59 */ 60 AddressMap readCsvFile(List<String> readLineList) { 61 // このaddressMapで初期化されたAddressMapを最後にreturnする 62 Map<ZipCode, Address> addressMap = new HashMap<ZipCode, Address>(); 63 for (String readLine : readLineList) { 64 String[] values = readLine.replaceAll("\"", "").split(","); 65 if (values.length != 15) { 66 continue; 67 } 68 69 ZipCode zipCode = new ZipCode(Integer.parseInt(values[2])); 70 Address address = new Address(values[6], values[7], values[8]); 71 // csvファイルから抜き出した要素を持つオブジェクトをZipCodeクラスのListに格納 72 addressMap.put(zipCode, address); 73 } 74 75 return new AddressMap(addressMap); 76 } 77 78 /** 79 * XMLファイル書き出し処理 80 * @param addressMap 81 * @param outputXmlFileName 82 */ 83 void writeXmlFile(AddressMap addressMap, String outputXmlFileName) { 84 try (FileOutputStream fos = new FileOutputStream(outputXmlFileName)) { 85 JAXB.marshal(addressMap, fos); 86 } catch (IOException e) { 87 e.printStackTrace(); 88 } 89 } 90 91 /** 92 * XMLファイル読込処理 93 * @param inputXmlFileName 94 * @return 95 */ 96 AddressMap readXmlFile(String inputXmlFileName) { 97 AddressMap readAddressMap = null; 98 try (FileInputStream fis = new FileInputStream(inputXmlFileName)) { 99 readAddressMap = JAXB.unmarshal(fis, AddressMap.class); 100 } catch (IOException e) { 101 e.printStackTrace(); 102 } 103 return readAddressMap; 104 } 105 106 /** 107 * 住所検索処理 108 * @param args 109 * @return 110 */ 111 String searchAddress(String args, AddressMap readAddressMap) { 112 if (args.length() != 7) { 113 } 114 return "桁数エラー"; 115 } 116 117 String searchAddress(AddressMap addressMap, ZipCode zipCode) { 118 119 if (addressMap.getAddressMap().containsKey(zipCode)) { 120 return addressMap.getAddressMap().get(zipCode).toString(); 121 } else { 122 return "不一致エラー"; 123 } 124 } 125 126}

###該当のソースコード(AddressMapクラス)

Java

1package Practice; 2 3import java.util.Map; 4 5import javax.xml.bind.annotation.XmlRootElement; 6/** 7 * zipCodeをKey 8 * addressをvalueとして持つクラス 9 * 10 * 11 */ 12 13@XmlRootElement(name = "AddressMap") 14public class AddressMap { 15 Map<ZipCode,Address> addressMap; 16 //コンストラクタ 17 AddressMap(){ 18 } 19 //初期化するコンストラクタ 20 AddressMap(Map<ZipCode, Address> addressMap){ 21 this.addressMap = addressMap; 22 } 23 24 public Map<ZipCode, Address> getAddressMap() { 25 return addressMap; 26 } 27 public void setAddressMap(Map<ZipCode, Address> addressMap) { 28 this.addressMap = addressMap; 29 } 30}

###該当のソースコード(ZipCodeクラス)

Java

1package Practice; 2/** 3 * 郵便番号の属性を持つ 4 * 5 * 6 */ 7public class ZipCode { 8 private Integer zipCode; 9 10 //コンストラクタ 11 ZipCode() { 12 } 13 //初期化するコンストラクタ 14 ZipCode(Integer zipCode) { 15 this.zipCode = zipCode; 16 } 17 18 public Integer getZipCode() { 19 return zipCode; 20 } 21 22 public void setZipCode(Integer zipCode) { 23 this.zipCode = zipCode; 24 } 25 26 @Override 27 public String toString(){ 28 return zipCode.toString(); 29 } 30 31 @Override 32 public boolean equals(Object obj) { 33 34 if( !(obj instanceof ZipCode) ){ 35 return false; 36 } 37 38 ZipCode zipCodeObj = (ZipCode)obj; 39 40 return this.zipCode.equals(zipCodeObj.getZipCode()); 41 } 42 43 @Override 44 public int hashCode() { 45 return this.zipCode.intValue(); 46 } 47 48} 49

###該当のソースコード(Addressクラス)

Java

1package Practice; 2 3import javax.xml.bind.annotation.XmlAttribute; 4import javax.xml.bind.annotation.XmlType; 5 6/** 7 * 住所の属性を持つ 8 * 9 * 10 */ 11 12@XmlType(propOrder={"prefecture", "city", "block"}) 13public class Address { 14 15 /**県名*/ 16 private String prefecture; 17 /**市町村名*/ 18 private String city; 19 /**町域*/ 20 private String block; 21 22 //コンストラクタ 23 Address(){ 24 } 25 26 //初期化するコンストラクタ 27 Address(String prefecture, String city, String block){ 28 this.prefecture = prefecture; 29 this.city = city; 30 this.block = block; 31 } 32 @Override 33 public String toString() { 34 return prefecture + city + block; 35 } 36 @XmlAttribute(name="Prefecture") 37 public String getPrefecture() { 38 return prefecture; 39 } 40 public void setPrefecture(String prefecture) { 41 this.prefecture = prefecture; 42 } 43 @XmlAttribute(name="City") 44 public String getCity() { 45 return city; 46 } 47 public void setCity(String city) { 48 this.city = city; 49 } 50 @XmlAttribute(name="Block") 51 public String getBlock() { 52 return block; 53 } 54 55 public void setBlock(String block) { 56 this.block = block; 57 } 58}

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

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

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

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

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

guest

回答2

0

Mainクラス

/** * 住所検索処理 * @param args * @return */ String searchAddress(String args, AddressMap readAddressMap) { if (args.length() != 7) { } return "桁数エラー"; }

も桁数エラーしか出ません。

投稿2017/06/15 09:03

szk.

総合スコア1400

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

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

0

Java

1System.out.println("result");

ではなく

Java

1System.out.println(result);

ではないでしょうか?

単なるtypoで、他に悪いところがあるのであれば、
ブレークポイントをmainメソッドの頭につけてデバッグしてみるとよいですよ~。

投稿2017/06/15 08:58

編集2017/06/15 09:01
s.t.

総合スコア2021

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問