

ユーザー定義メソッドを作成したいのですが、  
メソッドの呼び出し側の記述が、どうしたらよいのか分からなくて困っています。  
また、メソッド定義も合っているのか分からないため、教えて頂きたいです。

以下詳細、、、

・引数→文字列型  
・戻り値→文字列型を要素に持つ配列型  
・処理内容  
→3人分のプロフィール情報を、それぞれの配列で作成する。  
そして、引数として受け取ったIDの値と同じIDを持つ配列を、戻り値として返す。  
メソッドを作成したら、メソッドを呼び出し、  
その戻り値に格納された要素をそれぞれ表示する。  
このとき、表示する要素は反復処理によって順番に指定するものとし、IDの値については表示しないものとする。

//コード

[code]

    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse; 
    
    /** 
    
    @author otoja
    */
    public class kadai extends HttpServlet { 
    /** 
    Processes requests for both HTTP <code>GET</code> and <code>POST</code> 
    methods. 
    
    @param request servlet request 
    @param response servlet response 
    @throws ServletException if a servlet-specific error occurs 
    @throws IOException if an I/O error occurs
    */ 
    String[] profile(String key){
        String [][] profile_list={
            {"ID:123456","1993/11/8生まれ","東京都練馬区"},
            {"ID:987654","2012/3/14生まれ","東京都三鷹市"},
            {"ID:192837","2017/6/17生まれ","東京都中野区"} }; 
        if(key.equals(profile_list[1])){
            return profile_list[1]; 
        }else if(key.equals(profile_list[0])){
            return profile_list[0];
        }else{
            return profile_list[2];
        }
    } 
    
[/code]

上記で合っていますでしょうか？  
また、prosessRequest以降の呼び出し側は、どのように記述すればよいでしょうか？  
宜しくお願い致します。


CC BY-SA 4.0
2018-06-13T11:50:54.793
44748
2018-06-16T06:23:49.760
2018-06-13T13:45:19.993
19110
question
java
引数が文字列型と、戻り値が文字列型を要素に持つ配列型　処理方法


「表示」というのはおそらくHTMLとして表示するということだと推測しますが、実装例を提示するには詳細な入力仕様および出力仕様（フォーマット）に関する情報が不足しているため、ひとまず標準出力に1行ずつ表示する例を示します。

質問をするときは最低限のマナーとして、開発環境および実行環境に関する詳しい情報（OS、JDKのバージョンなど）を記載するようにしてください。新しいバージョンのJava言語仕様では、コードをより簡潔に記述できる機能などが追加されていますが、古いJDKでは使用できません。結果として環境に関する情報は回答のしやすさに影響します。

[技術系メーリングリストで質問するときのパターン・ランゲージ](http://view-
source:http://www.hyuki.com/writing/techask.html)

まずは **配列の配列** （ **ジャグ配列** ）のインデックス指定方法に関する文法を学習してください。

配列などのコレクションから要素を総当たりで **線形検索**
する場合、ループを使えば一般化できます。要素数がコンパイル時に決まらず、実行時にしか分からないケースにも容易に対応できます。条件分岐だと要素数が増えたときにコードのメンテナンス性が悪くなります。

ただし検索時間は _O_ ( _n_ )
で要素数に線形比例します。巨大なデータベースをメモリ上に載せる場合は通例検索効率のよいMapやHashMapなどを使います。

[code]

    /**
     * キーに該当するプロファイルを返す。
     * @param key 検索キー。
     * @return 見つかったプロファイル。該当しなければ null を返す。
     */
    static String[] searchProfile(String key) {
        final String[][] profileList = {
            {"ID:123456", "1993/11/8生まれ", "東京都練馬区"},
            {"ID:987654", "2012/3/14生まれ", "東京都三鷹市"},
            {"ID:192837", "2017/6/17生まれ", "東京都中野区"},
        };
        // 線形検索。検索時間は要素数に線形比例する。
        for (int i = 0; i < profileList.length; ++i) {
            if (key.equals(profileList[i][0])) {
                return profileList[i];
            }
        }
        return null; // 該当なし。
    }
    
    public static void main(String[] args) throws java.lang.Exception {
        String[] profile = searchProfile("ID:123456");
        if (profile == null) {
            System.out.println("Not found.");
            return;
        }
        for (int i = 1; i < profile.length; ++i) {
            System.out.println(profile[i]);
        }
    }
    
[/code]

ちなみに、質問文中の "processRequest" というのは何者ですか？  
おそらく以下のように HttpServlet.doGet(), HttpServlet.doPost()
内で呼び出すユーザー定義メソッドのことだと推測しますが、メソッドの中身をどう記述するかは、どういうサーブレットを実装するのか、ということに依存します。HTMLを出力するだけであれば、doGet()をオーバーライドします。サーブレットの実装はタイトル（本質問の主題）と乖離する内容になるため、質問を混ぜずにトピックを分けるか、質問自体を適切に修正・追記してください。

[code]

    public class MyServlet extends HttpServlet {
    
        protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO: クライアントのリクエストに応じた処理を実装。
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            processRequest(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            processRequest(request, response);
        }
    }
    
[/code]

なお、Javaの慣習ではクラス名の先頭を大文字にします。 **Javadocコメント** についても学習してください。


CC BY-SA 4.0
2018-06-13T17:34:17.677
44757
2018-06-14T05:49:07.367
2018-06-14T05:49:07.367
15413
15413
44748
answer

[code]

    if(key.equals(profile_list[1])){
        return profile_list[1]; 
    }else if(key.equals(profile_list[0])){
        return profile_list[0];
    }else{
        return profile_list[2];
    }
    
[/code]

このif文では、String型のkeyとString[]型のprofile_list[1]/profile_list[0]を比較しているため、常にprofile_list[2]が返ります。

単純に実装するとしたら次にようになるでしょうか。

[code]

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author otoja
     */
    public class kadai extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            this.processRequest(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            this.processRequest(request, response);
        }
    
        /**
         * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
         * methods.
         *
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String id = request.getParameter("id");
            if (id == null) {
                return;
            }
            String[] profile = this.profile(id);
            if (profile != null) {
                response.addHeader("Content-Type", "text/plain; charset=UTF-8");
                for (int i = 1; i < profile.length; i++) {
                    response.getWriter().println(profile[i]);
                }
            }
        }
    
        String[] profile(String key) {
            String[][] profile_list = {
                    { "ID:123456", "1993/11/8生まれ", "東京都練馬区" },
                    { "ID:987654", "2012/3/14生まれ", "東京都三鷹市" },
                    { "ID:192837", "2017/6/17生まれ", "東京都中野区" }
            };
            for (String[] profile : profile_list) {
                if (profile[0].equals(key)) {
                    return profile;
                }
            }
            return null;
        }
    }
    
[/code]


CC BY-SA 4.0
2018-06-16T06:23:49.760
44795
2018-06-16T06:23:49.760
28970
44748
answer