Javaのメソッドを使って、コードをシンプルにしたいです。
https://teratail.com/questions/34063
等を読んでみたものの、具体的にどうすればよいのか判らず…。
コチラ https://gist.github.com/AuroraNorthernQuarter/e369b74eb3ccf7d3eb550c0140c8264f にコードを記載しておりますので、メソッド(関数みたいなもの、と理解してます)で
共通化できる部分を共通化する方法をお教えいただけないでしょうか。
それとも、既にメソッドで共通化さていますでしょうか?
Eclipseでエラーは出ておらず。
問題なく実行できるのですが、コードの中身をちゃんと理解できず…よろしくお願い致します<m(__)m>
a-kuma3さんの後だと答え難いですが(汗)、質問者さんの元ソースの意図を汲まず、表面上の動作だけを実現するならこんな感じになります。Mapを用いる点はa-kuma3さんと同じです。
import java.util.Scanner; import java.util.HashMap; import java.util.Map; public class Sample2 { public static void main(String[] args) { Map<String, String> mapPrefHarb = new HashMap<String, String>(){ { put( "山口県", "門司港" ); put( "兵庫県", "神戸港" ); put( "神奈川県", "横浜港" ); } }; System.out.println("都道府県名を入れてください。有名な港をご紹介します。"); Scanner scan = new Scanner(System.in); String inPref = scan.next(); scan.close(); String outHarb = mapPrefHarb.get( inPref ); if(outHarb == null) { inPref = "その他の県は準備中"; outHarb = "準備中"; } System.out.println( inPref + "->" + outHarb ); } }
実際のプログラムだと、プロパティファイルに逃がすのが定石のような気もしますが、こんな感じのはどうでしょう。
package testprogramm; import java.util.Scanner; public class Sample { static private Map<String, String> pref_ = new HashMap<String, String>() { { put("山口県", "山口県"); put("兵庫県", "兵庫県"); put("神奈川県", "神奈川県"); } }; static private Map<String, String> harbor_ = new HashMap<String, String>() { { put("山口県", "門司港"); put("兵庫県", "神戸港"); put("神奈川県", "横浜港"); } }; public static void main(String[] args) { System.out.println("都道府県名を入れてください。有名な港をご紹介します。"); Scanner scan = new Scanner(System.in); String inputharbour = scan.next(); String name = pref_.getOrDefault(inputharbour, "その他の県は準備中"); String detail = harbor_.getOrDefault(inputharbour, "準備中"); System.out.println(name + "->" + detail); scan.close(); } }
「初期化ブロック」というやつを使ってます。
県を入力して、県を返す辺りは冗長ですが、質問のコードを尊重して、そのまま書き換えました。
Map.getOrDefault() メソッドは、Java8 からです。
ごめんなさい。タイプミス m(_ _)m
回答を修正しました。
HashMap.javaやMap.javaなど、別のファイルが必要みたいで。
クラスファイルなども必要みたいで、1ファイルで実行できるプログラムではなさそうですね。
ちょっと自分にはまだ早かったようです…(^^;
a-kuma3さんの後だと答え難いですが(汗)、質問者さんの元ソースの意図を汲まず、表面上の動作だけを実現するならこんな感じになります。Mapを用いる点はa-kuma3さんと同じです。
import java.util.Scanner; import java.util.HashMap; import java.util.Map; public class Sample2 { public static void main(String[] args) { Map<String, String> mapPrefHarb = new HashMap<String, String>(){ { put( "山口県", "門司港" ); put( "兵庫県", "神戸港" ); put( "神奈川県", "横浜港" ); } }; System.out.println("都道府県名を入れてください。有名な港をご紹介します。"); Scanner scan = new Scanner(System.in); String inPref = scan.next(); scan.close(); String outHarb = mapPrefHarb.get( inPref ); if(outHarb == null) { inPref = "その他の県は準備中"; outHarb = "準備中"; } System.out.println( inPref + "->" + outHarb ); } }
ありがとうございます。7行目、
Map<String, String> mapPrefHarb = new HashMap<String, String>(){
のところで逆三角形の軽い警告は出ておりますが。
うまく実行できました!
>メソッド(関数みたいなもの、と理解してます)
その通り。
>それとも、既にメソッドで共通化さていますでしょうか?
https://gist.github.com/AuroraNorthernQuarter/e369b74eb3ccf7d3eb550c0140c8264f
たぶん、されている(と思う)。
最適解とはいえなくても、普通の範疇であり得る書き方だと思う。
■
メソッド(関数)は、処理に注目して、共通部分の切り出しとか、文章でいうと段落ごとに切り出しして、可読性と保守性をあげる手法だと思う。
そのほかには、内部で使っているデータに注目して、処理の可読性と汎用性をあげる手法があって、すでに回答に上がっているのは、その路線での最適化?では?
■
>Javaのメソッドを使って、コードをシンプルにしたいです。
シンプルに見えないのは、データ部分があるからだけのような・・。
データが増えるにしたがって、処理の内容が見えなくなる雰囲気なので・・。
わかりやすい説明、ありがとうございます(^^;
ありがとうございます。7行目、
2018/10/21 11:01:19Map<String, String> mapPrefHarb = new HashMap<String, String>(){
のところで逆三角形の軽い警告は出ておりますが。
うまく実行できました!