// 既定義変数の説明  daisuu:問題数(4の倍数)、chapter:先頭章番号(1～10)、chapsuu:出題範囲の章数(4倍したものがdaisuu以上であること)
var catesuu = chapsuu * 4;	//出題範囲のカテゴリ数
switch(chapsuu) {	//タイトル内容決定
    case 1: title = t[chapter]; break;
    case 2: title = t[chapter] + "、" + t[chapter+1]; break;
    case 3: title = t[chapter] + "～" + t[chapter+2]; break;
    case 4: title = t[chapter] + "～" + t[chapter+3]; break;
    default: title = "全体";
}
var geta = (chapter-1)*4+1;	//カテゴリ番号のゲタ(2章ならカテゴリ5から始まるので5)
var content = "";	//問題文の格納エリア。最後にdocument.write()で出力
var seikai = "";	//正解番号の格納エリア。採点時に結果画面に表示
var c = Array(catesuu);	//出題済カテゴリテーブル(0:未出題,1:出題済)
for(i=0; i<catesuu; i++) { c[i] = 0; }
content += "<h1>Java知識小テスト (" + title + ")</h1>";

for(mondai=1; mondai<=daisuu; mondai++){	//全体のループ
  ran = Math.floor(Math.random()*1000);	//乱数発生。floor()は整数部をとる演算
  var category = ran%catesuu;	//出題する相対カテゴリ番号
  while(true) {
    if(c[category]==0) {	//当該カテゴリ番号が未出題なら
      c[category] = 1;		//出題済にしてその番号を返す
      break;
    } else {			//当該カテゴリ番号が出題済なら
      category++;		//次の番号を候補にして再度評価
      if(category==catesuu) category=0;
    }
  }
  var num = ran%(q[category+geta].length);	//出題問題選択(各カテゴリごとに通常4～5問ある問題候補から選択。候補のnum番目が出題される)
  var sel = a[category+geta][num].length; //解答選択肢の数(通常は3以上5以下)
  var jun = ran%sel;	//正解の位置をランダムにするため選択肢を回転させる数
  switch(jun) {		//採点結果windowに正解を表示するためのデータ準備
    case 0: seikai += "A"; break;
    case 1: seikai += "B"; break;
    case 2: seikai += "C"; break;
    case 3: seikai += "D"; break;
    case 4: seikai += "E"; break;
  }
  if(mondai%4 == 0) seikai += " ";	//見やすくするため4おきに空白を入れる
  content += "<form><p style=\"font-family: 'ＭＳ ゴシック';\">"
  content += "<br><strong>問題" + mondai + "</strong>";
//  content += "&nbsp;&nbsp;&nbsp;&nbsp;カテゴリ=" + (category+geta) + ",選んだ問題No=" + num + ",選択肢数=" + sel + ",選択肢移動数=" + jun + ",ランダム数=" + ran;	//テスト用
  content += "<br>" + q[category+geta][num] + "<br><br>&nbsp;&nbsp;【選択肢】<br>"
  for(i=0; i<sel; i++) {	//選択肢表示。選択肢数(sel)だけ繰り返す
    switch(i) {
      case 0: content += "&nbsp;&nbsp;&nbsp;&nbsp;A：&nbsp;&nbsp;"; break;
      case 1: content += "&nbsp;&nbsp;&nbsp;&nbsp;B：&nbsp;&nbsp;"; break;
      case 2: content += "&nbsp;&nbsp;&nbsp;&nbsp;C：&nbsp;&nbsp;"; break;
      case 3: content += "&nbsp;&nbsp;&nbsp;&nbsp;D：&nbsp;&nbsp;"; break;
      case 4: content += "&nbsp;&nbsp;&nbsp;&nbsp;E：&nbsp;&nbsp;"; break;
    }
    content += a[category+geta][num][(sel-jun+i)%sel] + "<br>";	//正解の位置をずらすためにAをjun番目,Bをjun+1番目…に移して出題する
  }
  content += "<br>";
  for(i=0; i<sel; i++) {	//解答用ラジオボタン表示
    switch(i) {
      case 0: content += "&nbsp;&nbsp;&nbsp;&nbsp;A"; break;
      case 1: content += "&nbsp;&nbsp;B"; break;
      case 2: content += "&nbsp;&nbsp;C"; break;
      case 3: content += "&nbsp;&nbsp;D"; break;
      case 4: content += "&nbsp;&nbsp;E"; break;
    }
    content += "<input type=radio name=ans value=";
    if(i==jun) {	//正解選択肢にはvalue=1を入れ
      content += "1>";	//得点計算時に集計する
    } else {
      content += "0>";
    }
  }
  content += "<br>";
  content += "</p></form>";
}

  content += "<hr><form><center>";
  content += '<input type="button" value="採点" onClick="rating(seikai)">';
  content += "　　";
  content += '<input type="button" value="リロード" onClick="window.location.reload(true)">';
  content += "<br></center></form>";
  document.write(content);
  document.close();
