首页 新闻 会员 周边 捐助

做一个自动阅卷系统,多选题时出现点问题

0
悬赏园豆:20 [已解决问题] 解决于 2015-09-17 15:37

我在做多选题的自动判分时,给分标准是这样的,如果试卷答案和标准答案一样,给2分;如果试卷答案和标准答案相比 ,少选了(比如:标准答案是“abc”,答案“ac”),给一分;错选或不选,给0分;

这个判断怎么写,我一开始判断答案是否包含在标准答案里,发现出错了。后来明白,“ac”是不包含在“abc”中的。但是怎么写现在一直没想起来,想请大家帮帮忙。如何简单的实现我的功能。

        protected int getFenshuDX(string result, string answer)
        {
            int a = 0;
            if(result.Contains(answer)==true && answer.Length>0){
                if(result.Equals(answer)){
                    a=2;
                }else{
                    a=1;
                }
            }else{
                a=0;
            }
            return a;
        }
飞翔的球迷的主页 飞翔的球迷 | 初学一级 | 园豆:153
提问于:2015-09-17 15:08
< >
分享
最佳答案
1
int a=0;
int fenshu=0;
string[] str=answer.Split("");
for(int i=0;i<str.length;i++){
  if(result.IndexOf(str[i])>-1){
    a++;
  }else{
    a=0;
return false;
  }
}
if(a>0){
  if(a=result.Split("").length){
    fenshu=2;
}else{
  fenshu=1;
}
}else{
  fenshu=0;
}

收获园豆:20
✎﹏ℳ๓₯㎕ღ | 小虾三级 |园豆:1499 | 2015-09-17 15:19

还是不行啊, 还是我说的这个问题,没解决啊。你这样判断,ac还是不在abc中,跳到的是0处

 

飞翔的球迷 | 园豆:153 (初学一级) | 2015-09-17 15:23

@飞翔的球迷: 我修改了一下,你在看看

✎﹏ℳ๓₯㎕ღ | 园豆:1499 (小虾三级) | 2015-09-17 15:23

@MrLenon: 我这报错了 if(result.IndexOf(answer.Split("")[0])>-1){

错误 1 与“string.Split(params char[])”最匹配的重载方法具有一些无效参数 

飞翔的球迷 | 园豆:153 (初学一级) | 2015-09-17 15:26

@飞翔的球迷: 你可以把result和answer都转成数组,一个个比较

✎﹏ℳ๓₯㎕ღ | 园豆:1499 (小虾三级) | 2015-09-17 15:27

@MrLenon: 也对哦,谢谢,我试试。你能不能帮我写写,我参考一下,着急。

飞翔的球迷 | 园豆:153 (初学一级) | 2015-09-17 15:31

@飞翔的球迷: 你再看看 能看明白不

✎﹏ℳ๓₯㎕ღ | 园豆:1499 (小虾三级) | 2015-09-17 15:34

@MrLenon: 恩,比我想的好,谢谢

飞翔的球迷 | 园豆:153 (初学一级) | 2015-09-17 15:36
其他回答(2)
0

把result拆分为数组,再判断answer是否包含某个拆分的字母

fy1549286041 | 园豆:202 (菜鸟二级) | 2015-09-17 15:31
0

楼上都说了先把两个答案转为LIST(char),判断如下

1、先对比两个String,完全相同,得分2。

2、拆分为两个list(char),取并集,如果并集Item数量大于标准答案的Item数量,得分0。

3、如果并集Item数量小于等于标准答案的Item数量,取交集,如果交集Item数量大于0,得分1,否则得分0。

这样应该已经包含了所有的可能性了。

代码类似

if (StandardString == UserString) 
{
    result=2;
}
else
{
    var sList =   StandardString.ToCharArrary();
    var uList =   UserString.ToCharArray();

    var JoinList = sList.Union(uList);
     if (JoinList.count() > sList.count())
     {
       return 0;
      }
      else
       {
        var InterList = Slist.intersect(uList);
        if (InterList.count()>0)
           {
             return 1;
            }
         else
            {
             return 0;
             }
         }
}
爱编程的大叔 | 园豆:30844 (高人七级) | 2015-09-17 15:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册