プロが教える店舗&オフィスのセキュリティ対策術

環境エクリプス5.5。JAVA言語を使いJSPでクイズプログラムを作ることになりました。流れは、いくつかの選択ボタンがあり、押したら問題が1問出て、4択式の中からクリック式で選び、正解だったら正解ページに行き、間違いだったら不正解ページに行きますが解説は正解も不正解も一緒です。その正解、不正解ページにある「次の問題」というボタンを押したら次の問題をだします。問題は10問です。MVCアーキテクチャーの概念にそって、サーブレット、モデル、ビューで作っていきます。問題をテキストにつくりたいのですが、先ほどの説明画面のようにするには、テキストでどのように作っておけばよいのか?わかりません。テキストはモデルクラスで呼ぶのですが、そのクラスでどのような定義をしたら呼べるのか?どのようにしあたら、問題、回答4つ、解説をわけることができるか?。お願いします。どなたか教えていただけませんか?できなくてとても困っています。

A 回答 (4件)

RDBMSを利用可能なら、そちらの方がいいです。



利用不可でしたら、CSV(カンマ区切り)かTSV(TAB区切り)形式で十分でしょう。1行に1問を書き、左から、問題文、回答番号、回答1、回答2、回答3、回答4、の6カラムをカンマかTABで区切ります。

【例】
Javaの宿題ができない。どうする?,1,自力でやる,教えてgoo,Google,諦める
日本の首都は?,3,ニューヨーク,ロンドン,東京,モスクワ
    • good
    • 0
この回答へのお礼

ありがとうございます。たとも助かりました。もしわかるようでしたら、こちらも教えていただけませんでしょうか?(どなたでもよいですのでお願いいたします)まず前質問の通り、サーブレットでボタンが押されたリクエストを受け取り、モデルクラスにテキストを呼んでねとお願いします。モデルはテキストを呼び、検索、分解します。(もしかしたらモデルはテキストを呼ぶだけで、分解はJSPでした方がよいのでしょうか?)サーブレットはJSPにフォワードしJSPはHTMLとモデルは参照しながら画面を構成します。私の今のモデルクラスの記述は
FileReader fr = null;
fr = new Filereader(shokuji.txt);
BufferedReader br = new BufferedReader(fr);
while(br.ready()){
としているのですがここから先、テキストを読んだらどのように、一行にした問題、回答4つ、解説を分けることができますでしょうか?
*問題構成は、まず選択ボタンから選びクリックしたら問が一問、4つの中から選び、正解だったら正解ページ、不正解だったら不正解ページ(解説は正解、不正解一緒)に行き、「次の問題」ボタンをクリックしたら、また1問問題がでてきます。10問あります。1問出すのはモデルクラスでどう定義したらよいでしょうか?質問が幾つもあり申し訳ありませんが、回答して下さった方を含め、どなたでもよいので御回答よろしくお願いいたします。

お礼日時:2007/12/09 11:26

私としては、最も単純なパターンとしては、例えば以下のように設計するでしょう。


しかしながら、この問題インターフェースは選択問題にしか対応できていない点に
問題がありますが。
現実には、拡張性を考えて○×問題や並べ替え問題等にも対応しておくべきでしょう。

interface 問題 {
 String get問題文();
 int get選択肢Count();
 String[] get選択肢();
 String get選択肢( int index );
 boolean is正解( int 解答番号 );
 int get正解();
 int get配点();
 String get正解解説();
}

public class Default選択問題 implements 問題 {
 
 private String 問題文;
 private int 選択肢Count;
 private String[] 選択肢;
 private int 正解番号;
 private int 配点;
 private String 正解解説;
 
 public Default問題( int 問題番号 ) {
  File file = new File( "問題ファイル" + 問題番号 + ".txt" );
  ...
  問題 = ...;
  選択肢Count = ...;
  ...
 }
 public String get問題文() {
  return 問題文;
 }
 ...
 ...
 public boolean is正解( int 解答番号 ) {
  return 正解番号 == 解答番号;
 }
 ...
}


>押したら問題が1問出て、4択式の中からクリック式で選び...
>... 問題は10問です。

この様に具体的に汎用性のないことを具体的に記述されたかと思えば、

>MVCアーキテクチャーの概念にそって、...

という事を考えておられるという点が非常に不思議です。

というのも、問題が1問づつ出てくるか、一覧で表示されるかは単に
ビューの問題であって他に全く影響を与える問題でもありませんし、
回答方法に関しても、マウスをクリックするか、キーボードで数値を
選択するか等も完全にコントローラ(GUIインターフェース)の問題なので
どの様に実装されようが他に影響はないでしょう。

>テキストでどのように作っておけばよいのか?わかりません。

MVCパターンの考え方に従えば、問題文がローカルファイルとして
保存されていようが、ホストサーバにデータベースシステムを用いて保存されていようが、
それらを意識することなく、get問題文()メソッドを呼べば、
問題文が取得されるようになっているべきだということです。

要するに、テキストはどのように作ってあっても、それに対応した
問題インターフェースが実装されている事を前提として、
どの様にテキストが作成されていようとも全く問題ではないということになります。

ちょっと説明が難しいでしょうか?
    • good
    • 0
この回答へのお礼

本当にありがとうございます。私はJAVAを習って一ヶ月くらいですので、まだ全然身についておりません。上記の回答文の中で、また質問とお願いがございます。お手数ですがご回答宜しくお願い申し上げます。
質問(1) int get選択肢Count();とString[] get選択肢();           の違いの説明をお願いいたします。

質問(2) String get選択肢( int index );
    の( int index );はどのような意味なのでしょうか?

質問(3) ( "問題ファイル" + 問題番号 + ".txt" );
    の"問題ファイル"はテキストが入っているフォルダー名のことでし    ょうか?

質問(4) 問題 = ...;
    選択肢Count = ...;
    の. . . はどのような意味なのでしょうか?
問題 =
選択肢Count =
の後に何を記述すればよいのでしょうか?
   

質問(5) 上記の回答文にによる、テキストの問題、回答4つ、解説を含めた記    述例を再度お願いいたします。

 今後もしかしたら、一日おきに質問させていただくかとは思いますが、何卒宜しくお願い申しあげます。焦っておりましたので、ここでこのように伺うことで落ちつこうと思っているのです。御回答して下さった方には本当に感謝しております。

お礼日時:2007/12/09 17:51

>私はJAVAを習って一ヶ月くらいですので、まだ全然身についておりません。


そういうことでしたか。書かれている内容に不自然さが漂っている理由がわかりました。

>>MVCアーキテクチャーの概念にそって、サーブレット、モデル、ビューで作っていきます。
当初の質問で、このように書かれておられましたが、この言葉の意味が理解できない
Javaプログラマーは沢山います。
私の感覚からすると、Javaプログラミングを3年程度個人的に勉強しているアマの
プログラマーなら、MVCとは何の略かという問でも半数近くが答えられないでしょう。
Javaプログラミングを職業としているプロの技術者でも
実務経験3年程度以内なら半数以上の人はMVCパターンを意識した設計経験はないでしょう。

(1)プログラミング暦1ヶ月の人が、JSPでクイズプログラムをMVCパターンを使って設計する。

ということは、

(2)ゴルフ暦1ヶ月の人が、アゴが腰よりも高い場合のバンカーショットの打ち方を特訓する。
(3)囲碁を覚えて1ヶ月の人が、石の下の筋で殺す詰碁の問題を創作する。
(4)スイミングスクールに通い始めて1ヶ月の児童が、背泳のクイックターンを練習する。

ということに例えられるほど無理があるだろうという事なのです。
Javaを習って一ヶ月くらいの人もMVCパターンとは何かを勉強しておくことは、
非常に有意義だとは思いますが、それによる設計を体験するのは時期尚早だと...
とかく初心者のころは、物事を単純化して捉えることになれていないこともあって、
小さなプログラミング単位の中で沢山の事を実行したくなるものです。
それを矯正するという意味でも、MVCパターンを知っていることは大事です。


長くなりましたが、以上が前置きです。
次に具体的な質問項目に関して、やや抽象的に回答していきます。

>質問(1) int get選択肢Count();とString[] get選択肢();の違いの説明をお願いいたします。
違いというか、全く違うものですので比較して述べる事はできません。
int get選択肢Count()というメソッドは、選択肢の個数を返すメソッドです。
”回答4つ”と書かれておられますが、これは選択肢が4つで、その内に1つの正解がある
4択問題だという意味でしょうから、この場合には整数の4を返すメソッドだという事です。
String[] get選択肢()メソッドは、4つの選択肢の内容(文字列)を4つの文字列配列として
返すメソッドだということです。

>質問(2) String get選択肢( int index );の( int index );はどのような意味なのでしょうか?
これは、質問(1)にあったString[] get選択肢()メソッドは全ての選択肢を配列として返しましたが、
このメソッドは、その配列の中のindex番目の選択肢を1つ返すということです。

>質問(3) ( "問題ファイル" + 問題番号 + ".txt" );の"問題ファイル"はテキストが
>   入っているフォルダー名のことでしょうか?
これは、理解して欲しいところです。問題番号 = 48 だったとしたら、その括弧の中は、
 "問題ファイル48.txt"
というファイル名になるという事です。

>質問(4) 問題 = ...;
>    選択肢Count = ...;
>    の. . . はどのような意味なのでしょうか?
>問題 =
>選択肢Count =
>の後に何を記述すればよいのでしょうか?
この記述の中の '問題 =' というのは '問題文 =' の誤記です、失礼しました。
問題文 = の右辺が ...となっているのは、
 ”適当な方法を用いて問題文が取得されるように実装されていれば良い”
具体的には、前述のようにローカルディスクにテキストファイルとして問題文が
保存されているのならば、
 BufferedReader br = new BufferedReader( new FileReader("問題ファイル" + 問題番号 + ".txt") );
 問題文 = br.readLine();
であるかもしれませんし、FTPサーバからデータを取得するなら、URL urlに対して
 BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream()) );
 問題文 = br.readLine();
として取得されるかもしれません。すなわち、これは個別具体的な実装に依存するということです。
ここで大事なことは、MVCパターンで言うコントローラの立場からすると、どこにどの様な形式で
保存されているデータかを意識することなく、get問題文()メソッドを呼べば所望の問題文が
取得できるようになっている、という事です。

>質問(5) 上記の回答文にによる、テキストの問題、回答4つ、解説を含めた記述例を再度お願いいたします。
ちょっと、昨日の日曜日に具体的に設計・実装を行ってみたのですが、このQ&Aの場で
簡単に公表できるレベルのものにはなりませんでした。量だけを考えても。
私個人のHPにリンクを張る方法も考えてはいますが、とにかく、Javaを習って一ヶ月という人が
見ても、簡単に得られるものは少ないと思われます。

ということで、とりあえず上記回答を見て、どの程度自力で実装できるか挑戦してみてください。
また、MVCのVは設計できますか?MVCの中では一番理解しやすいでしょう。
Vを設計するときには、MもCも忘れてVの事だけを考えるということが肝要です。

繰り返しになりますが、どう考えても、設計・実装しようとしている例題が難しすぎます。
設計に比べれば、具体的な実装は遥かに簡単なのですが、この例題の場合には、
それでもそんなに簡単ではありません。
個人に裁量権があるのならば、もっと小さな簡単な例題に取り組む事を強くお勧めします。
    • good
    • 0
この回答へのお礼

ご丁寧な御回答心より感謝申しあげます。とても助かりました。少しずつですが進めて行きたいと思っております。今後この作業を進めていく上で、この質問に御回答して下さった方や様々な方に、お願いを致すかもしれませんが、何卒宜しくお願い申しあげます。このようなわからずやに親切に回答してくださって大変うれしく思っております。今後ともアドバイスを宜しくお願い致します。

お礼日時:2007/12/10 21:00

回答。


J2EEサーブレットとJSPを教えてくれる
スクールに通って資格で言えば
SJC-WCを取得できる位の実力と

経験を最低半年は積まないと
コーディングに向いている人でも
無理だろうと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!