我在做多选题的自动判分时,给分标准是这样的,如果试卷答案和标准答案一样,给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; }
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;
}
还是不行啊, 还是我说的这个问题,没解决啊。你这样判断,ac还是不在abc中,跳到的是0处
@飞翔的球迷: 我修改了一下,你在看看
@MrLenon: 我这报错了 if(result.IndexOf(answer.Split("")[0])>-1){
错误 1 与“string.Split(params char[])”最匹配的重载方法具有一些无效参数
@飞翔的球迷: 你可以把result和answer都转成数组,一个个比较
@MrLenon: 也对哦,谢谢,我试试。你能不能帮我写写,我参考一下,着急。
@飞翔的球迷: 你再看看 能看明白不
@MrLenon: 恩,比我想的好,谢谢
把result拆分为数组,再判断answer是否包含某个拆分的字母
楼上都说了先把两个答案转为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; } } }