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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

772閲覧

ひとつの変数に次々と要素を増やしていくロジック

Dash_003

総合スコア27

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

1クリップ

投稿2019/09/03 02:40

今回の質問内容、お聞きしたいことの具体例を記載します。

1、一番最初に質問をする
『今何が食べたい気分ですか?』
A1,和食 A2,洋食 A3,中華

2、2番目の質問に移る
『絶対に譲れない食材は?』
A1,肉 A2,魚 A3,野菜

3、(肉を選んだ場合)
『種類は?』
A1,牛肉 A2,豚肉 A3,鶏肉 A4,ラム肉

4、別の質問に移る
『他にも食べたい食材はある?』
A1,魚 A2,野菜 

5、別の質問に移る
『どんなスタイルが良い?』
A1,汁物 A2,丼もの A3,定食

こんな感じで次々と質問および回答を続けていきます。
(実際にはもっと多い質問を想定しています)

「洋食が食べたい、肉は譲れない、牛肉が食べたい」
という回答をした人には、「洋食」「肉」「牛肉」という要素を持たせたいです。
(トーナメント表のように決まったルートを進んでいくのではなく、アキネーターのように流動的な質問でその都度要素を拾えるものを想定しています。)


そのうえでデータベースにはあらゆる料理を登録しておき、ハンバーグだったら「洋食」「肉」、エビチリだったら「中華」「エビ」「辛い」などの要素を持たせておきます。

最終的にはユーザーが回答した中で得た要素を条件にデータベースから検索をして、今の気分に適した料理を表示できるようにしたいです。
ここは全てが一致していなくても、一致した要素が多いものを選びたいです。

困っている事

やりたい事は固まっているのですが、肝心のソースコードの組み立てやロジックが調べても中々出てこず固める事ができません。
質問と回答をどんどん繰り返していって、最終的な回答だけに要素を持たせる(全部の組み合わせを作っていく)というやり方ではなく、回答1回ごとに要素が蓄積されていくようなやり方がしたいのですが、何か方法はありますでしょうか?
どういった技術、構文を使えばいいのか、ざっくりでも構わないので教えていただけるとありがたいです。

よろしくお願いします。

一応自分で考えているロジックも記載させていただきます。

考えているロジック

まずは何も入っていない変数を定義する。

String food = null;

回答選択肢にデータベース上で要素を登録しておき、選んだ回答に応じて呼び出し、変数に追加していく。

select <要素> from AnserList where click = "エビ" rs.next(); String colect = rs.getString("要素"); food = food + colect; これを複数回繰り返してく

こんな感じで追加していけるのかな?と考えています。
ただ、貯まりに貯まった要素をどう展開し、sql文のwhere句で条件として指定するのかがお恥ずかしながら思いつかない状態です。

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

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

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

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

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

m.ts10806

2019/09/03 02:43

最終的に表示するときの順番は問1~の順ですか?それとも何かしら法則があるのでしょうか?
m.ts10806

2019/09/03 02:44

要はAIの教師データとなるものを作りたいとお見受けしました。
Dash_003

2019/09/03 02:53

最終的に表示するときの順番というのは、完成形においてどのような質問形式を取るかという事でしょうか? 1~2問目あたりまでは和洋中のジャンルであったり、普遍的な内容を必ず表示したいです。 3問目以降は食べたいものをどんどん表示して選んでもらい、「もうこれ以上はない」という回答ボタンを押した段階でそれ以上の食材候補を表示する事を中断し、おススメの料理を表示しようと想定しています。
guest

回答2

0

ベストアンサー

1~2問目あたりまでは和洋中のジャンルであったり、普遍的な内容を必ず表示したいです。

3問目以降は食べたいものをどんどん表示して選んでもらい、「もうこれ以上はない」という回答ボタンを押した段階でそれ以上の食材候補を表示する事を中断し、おススメの料理を表示しようと想定しています。

必要なのは料理自体のタグ付けですね。
ジャンルであったり材料であったり地域であったりより細かいタグ付けが必要です。

質問内容はそのタグを選ばせるようにすること、です。

で「もうこれ以上はない」とユーザーが中断するまでは、セッションに配列でためていけば良いと思います。
1つの変数に追記するのではなく、配列で、できればタグもジャンルが細かく分かれていたほうが良いので、質問毎にタグのカテゴリとともにキーを与えておく。

こんな感じで

{ 'category':'洋食', 'required_items':'肉', 'meet_category':'牛肉', 'other_stuff':[ '人参', '玉ねぎ' ] }

あとは料理に登録されたタグと合致するものかどうかを比較する。
ただ、完全一致では何も出てこない可能性もあるので、「他の食材」部分は2つ選んでたらどちらかに一致していればOKとか幅を持たせたほうが良いかもしれません。

設計部分が結構大変ですね。

投稿2019/09/03 03:03

m.ts10806

総合スコア80850

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

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

0

私はDB、今までで触ったことが一度もありません。
それでもいいなら。


データをどこに保存するか( DB? バイナリファイル? テキストファイル? ) は仕様によると思いますが、
私もm.ts10806さんがおっしゃるように、
「タグをつけておく」ですかね。

例えばC言語での構造体に相当するクラス( あるいはC++流儀のクラスでもいいけど ) を定義して、

Java

1public class Question{ 2 public Question( String question, String keywords ){ /* ここでセット */ } 3 public String question(){ return question_; } 4 public bool hasKeyword( String keyword ){ 5 // ここでkeywords_ 内にkeyword があるかどうか調べる 6 } 7 private String question_; 8 private String keywords_; 9}

みたいにしておいて、

Java

1// mainメソッド等で 2List<Question> allQuestions = new ArrayList<Question>(); 3 4allQuestions.add( new Question( "牛肉好き?", "牛肉;中華;洋風" ) ); 5... // ほかにも追加しておく 6 7 8List<Question> questions = new ArrayList<Question>(); // ユーザが選んだ方 9 10for( Object q : allQuestions ){ 11 if( q.hasKeyword( "牛肉" ) ) questions.add( q ); 12}

みたいに、大本のallQuestions にセットしたものから、条件に一致するQuestionオブジェクトを questionsにコピーする...

みたいにすればいいのでは?

ただ、私は質問文をすべて読んでいないので、問題の意図を理解していない可能性があります。

投稿2019/09/03 03:26

BeatStar

総合スコア4958

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

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

m.ts10806

2019/09/03 03:35

いつもの投稿バグだと思いますが投稿文が途中で切れてます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問