Javaの質問です。メソッドについて。

Javaのメソッドを使って、コードをシンプルにしたいです。

https://teratail.com/questions/34063
等を読んでみたものの、具体的にどうすればよいのか判らず…。
コチラ https://gist.github.com/AuroraNorthernQuarter/e369b74eb3ccf7d3eb550c0140c8264f にコードを記載しておりますので、メソッド(関数みたいなもの、と理解してます)で
共通化できる部分を共通化する方法をお教えいただけないでしょうか。
それとも、既にメソッドで共通化さていますでしょうか?
Eclipseでエラーは出ておらず。
問題なく実行できるのですが、コードの中身をちゃんと理解できず…よろしくお願い致します<m(__)m>

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2018/10/21 13:29:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Silvanus No.2

回答回数180ベストアンサー獲得回数71

ポイント300pt

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 );
	}
}
id:moon-fondu

ありがとうございます。7行目、

Map<String, String> mapPrefHarb = new HashMap<String, String>(){

のところで逆三角形の軽い警告は出ておりますが。
うまく実行できました!

2018/10/21 11:01:19

その他の回答2件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント200pt

実際のプログラムだと、プロパティファイルに逃がすのが定石のような気もしますが、こんな感じのはどうでしょう。

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 からです。

他1件のコメントを見る
id:a-kuma3

ごめんなさい。タイプミス m(_ _)m
回答を修正しました。

2018/10/21 11:57:23
id:moon-fondu

HashMap.javaやMap.javaなど、別のファイルが必要みたいで。
クラスファイルなども必要みたいで、1ファイルで実行できるプログラムではなさそうですね。
ちょっと自分にはまだ早かったようです…(^^;

2018/10/21 13:28:45
id:Silvanus No.2

回答回数180ベストアンサー獲得回数71ここでベストアンサー

ポイント300pt

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 );
	}
}
id:moon-fondu

ありがとうございます。7行目、

Map<String, String> mapPrefHarb = new HashMap<String, String>(){

のところで逆三角形の軽い警告は出ておりますが。
うまく実行できました!

2018/10/21 11:01:19
id:kaoato No.3

回答回数236ベストアンサー獲得回数86

ポイント100pt

>メソッド(関数みたいなもの、と理解してます)

その通り。

>それとも、既にメソッドで共通化さていますでしょうか?
https://gist.github.com/AuroraNorthernQuarter/e369b74eb3ccf7d3eb550c0140c8264f

たぶん、されている(と思う)。

最適解とはいえなくても、普通の範疇であり得る書き方だと思う。



メソッド(関数)は、処理に注目して、共通部分の切り出しとか、文章でいうと段落ごとに切り出しして、可読性と保守性をあげる手法だと思う。


そのほかには、内部で使っているデータに注目して、処理の可読性と汎用性をあげる手法があって、すでに回答に上がっているのは、その路線での最適化?では?



>Javaのメソッドを使って、コードをシンプルにしたいです。

シンプルに見えないのは、データ部分があるからだけのような・・。
データが増えるにしたがって、処理の内容が見えなくなる雰囲気なので・・。

id:moon-fondu

わかりやすい説明、ありがとうございます(^^;

2018/10/21 13:22:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません