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

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

ただいまの
回答率

90.46%

  • Java

    14117questions

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

  • Apache

    1870questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • Eclipse

    1710questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Tomcat

    570questions

  • for

    245questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Javaでfor文のコードのみ処理がされません

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 684

Sfidante

score 90

Javaのfor文の処理が反映されません

まずは、下記に該当するクラスを載せます
package search;

import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import profile.Ngram;
import beans.ClientBeans;
import beans.EngineerBeans;
import dao.SearchClientDao;

@WebServlet(name = "SearchClientList" , urlPatterns = { "/SearchClientList" })
public class SearchClientList extends HttpServlet{
    private static final long serialVersionUID = 1L;
    Map<Integer , Integer> industryMap = new HashMap<>();
    Map<Integer , Integer> typeOfIndustryMap = new HashMap<>();
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf8");
        HttpSession ses = request.getSession(true);
        int engineerid = (int)ses.getAttribute("engineerid");
        SearchClientDao searchClientDao = new SearchClientDao();
        EngineerBeans bengineerBeans;
        LinkedList<ClientBeans> clientList = new LinkedList<>();
        try{
            searchClientDao.connect();
            searchClientDao.selectSearchClient(engineerid);
            String place = searchClientDao.selectSearchClient(engineerid).getDemand_place();
            Map<String, Integer> map = Ngram.createNgram(place, 2);
            int price = searchClientDao.selectSearchClient(engineerid).getDemand_price();
            int price_min = 0;
            int price_max = 0;
            if(price == 1){
                price_min = 21;
                price_max = 40;
            }else if(price == 2){
                price_min = 41;
                price_max = 60;
            }else if(price == 3){
                price_min = 61;
                price_max = 80;
            }else if(price == 4){
                price_min = 81;
                price_max = 100;
            }else if(price == 5){
                price_min = 101;
                price_max = 200;
            }
            searchClientDao.selectSearchIndustry(engineerid);
            int industry1 = searchClientDao.selectSearchIndustry(engineerid).getIndustry1();
            industryMap.put(1, industry1);
            int industry2 = searchClientDao.selectSearchIndustry(engineerid).getIndustry2();
            industryMap.put(2, industry2);
            int industry3 = searchClientDao.selectSearchIndustry(engineerid).getIndustry3();
            industryMap.put(3, industry3);
            
            searchClientDao.selectSearchTypeOfIndustry(engineerid);
            int type_of_industry1 = searchClientDao.selectSearchTypeOfIndustry(engineerid).getType_of_industry1();
            typeOfIndustryMap.put(1, type_of_industry1);
            int type_of_industry2 = searchClientDao.selectSearchTypeOfIndustry(engineerid).getType_of_industry2();
            typeOfIndustryMap.put(1, type_of_industry2);
            int type_of_industry3 = searchClientDao.selectSearchTypeOfIndustry(engineerid).getType_of_industry3();
            typeOfIndustryMap.put(1, type_of_industry3);
            
            for (Map.Entry<String, Integer> entry : map.entrySet()) {
                String place_piece = entry.getKey();
                System.out.println(place_piece);
                for(int i = 1; i < industryMap.size(); i++){
                    for(int j = 1; j < typeOfIndustryMap.size(); j++){
                                int industry_num = industryMap.get(i);
                                int type_of_industry_num = typeOfIndustryMap.get(j);
                                System.out.println(industry_num);
                                System.out.println(type_of_industry_num);
                                clientList.addAll(searchClientDao.searchClientList(place_piece , price_min , price_max , type_of_industry_num , industry_num));
                            }
                        }
                    }
            
            request.setAttribute("clientList", clientList);
            searchClientDao.close();
            request.getRequestDispatcher("MatchingList_engineer.jsp").forward(request, response);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

上記のクラスでデータベースのデータを取得して、
JSPでそのデータを表示させようとしています。

該当の処理がされない箇所が以下の部分です。
for (Map.Entry<String, Integer> entry : map.entrySet()) {
                String place_piece = entry.getKey();
                System.out.println(place_piece);
                for(int i = 1; i < industryMap.size(); i++){
                    for(int j = 1; j < typeOfIndustryMap.size(); j++){
                                int industry_num = industryMap.get(i);
                                int type_of_industry_num = typeOfIndustryMap.get(j);
                                System.out.println(industry_num);
                                System.out.println(type_of_industry_num);
                                clientList.addAll(searchClientDao.searchClientList(place_piece , price_min , price_max , type_of_industry_num , industry_num));
                            }
                        }
                    }

ここが丸々処理されずにJSPにディスパッチしてしまいます。

処理自体は間違っている可能性大ですので、気にしないで下さい笑

原因が全くわかりませんので、
ご教授いただけるとありがたいです。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

for文がマルっと処理されないのなら、
条件にしているmapが空っぽなのではないでしょうか?
検索条件にヒットするデータがないとか、SQLが間違っているとか。
Ngram.createNgram()で何を処理しているか分かりませんが、
そこで作成しているMapに何も入っていないのだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/25 14:22

    ご回答ありがとうございます。
    mapが処理されるfor文を省いて処理させてみましたが、
    内側のfor文の方も処理がありませんでした。

    また、エラーが全く出力されていないのですが、
    mapが空っぽということはあるのでしょうか?

    キャンセル

  • 2015/06/25 15:15

    for文の直前でmap.size()で中身のサイズを調べてみてはいかがでしょうか。
    ちなみにMapが空でもfor文はエラー出ないです。0周のfor文がエラーにならないのと一緒です。

    キャンセル

  • 2015/06/25 15:55 編集

    > for(int i = 1; i < industryMap.size(); i++){
    > for(int j = 1; j < typeOfIndustryMap.size(); j++){

    の部分ですね。
    確かにフィールドでnewしているので、map自体には値がputされていますが、
    typeOfIndustryMapにputしている部分が全て key = 1 に対して値を紐付けているため、
    typeOfIndustryMap.size() が 1になっていると思います。
    (1つのkeyに上書きしています。)

    for文の初期値 j に1がきているので、条件式 j < typeOfIndustryMap.size() の部分が 1 < 1 となり、for文内の処理が一度も実行されることなく進んでしまっているのだと思います。

    industryMap と typeOfIndustryMap を取り扱っている for文を
    条件部 ⇒ map.size()+1 とするか、

    for (Integetr key : map.keySet()) {
    System.out.println(map.get(key));
    }
    のようにするか、にしたら良いかと思います。

    キャンセル

  • 2015/06/25 17:47

    お二方共ありがとうございました。

    >for文の直前でmap.size()で中身のサイズを調べてみてはいかがでしょうか。
    >ちなみにMapが空でもfor文はエラー出ないです。0周のfor文がエラーにならないのと一緒です。

    おっしゃる通り、map.sizeが0でありました。
    それに対しての処理をおこない改善しました。

    >typeOfIndustryMapにputしている部分が全て key = 1 に対して値を紐付けているため、
    >typeOfIndustryMap.size() が 1になっていると思います。

    凡ミスですね。汗
    ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.46%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    14117questions

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

  • Apache

    1870questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • Eclipse

    1710questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Tomcat

    570questions

  • for

    245questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。