最近我正在用jsp做一个考试系统,可是随机抽题时会出现抽取了重复的题,我在数据库的题库中定义了一个isChosen的字段,当被选过时,就改为true(或者yes),但是这样相当于修改了数据库啊,那么是不是要把选过的在修过来吗,这样的方法呀太笨了吧,请问哪位高手有高招啊?谢谢!我的问题比较罗嗦,不知本人是否表达清楚,呵呵!

解决方案 »

  1.   

    你这样做,数据库里面每个题目都应该有一个题号,或者id,你如果打算从50条题目里面 选择出来20条,你先把选择出来的题目放进一个set里面int i=1;
    Set s=new HashSet();
    while(i<=20){
    s.put(num);
    }这样你选择出来的题目就肯定不重复了。
      

  2.   


    楼上思路正确,但写出的代码有些问题:Set s=new HashSet();
    while(set.size()<20){
    //抽取题目,假设赋值给item
    item=getRandomItem();
    if (!s.contains(item)){
      s.put(item);
    }
    }
      

  3.   

    只要保证不同id的题不重复 你只要确保选择的id是不同的就行了 产生不重复的20个ID的方法楼上已经给出了 
      

  4.   

    MySQL:
    SELECT * FROM t_questions t ORDER BY rand() LIMIT 10;Oracle:
    SELECT *
      FROM (
        SELECT * FROM t_questions t ORDER BY dbms_random.VALUE
      )
     WHERE rownum <= 10;