以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]超费脑的逻辑判断,求传说级出来指点下~ (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=77225) |
-- 作者:jwt -- 发布时间:2015/11/13 10:42:00 -- [求助]超费脑的逻辑判断,求传说级出来指点下~ 我弄了个测评记录软件,根据得分自动给出评价,但是有个气质类型的判断,太复杂了,上来求教 这是气质类型的判断方法: 1、如果某类气质得分明显高出其他三种,均高出4分以上,则属于该种气质类型。 2、如果两种气质类型的得分很接近,两者之差小于3,但同时又明显高于其他两种类型,其高出部分超过4分以上者,则属于两种气质的混合型。 3、如果三种气质的得分很接近,之差均小于3,但又明显高于第四种者,且超过4分以上,则属于三种气质的混合型。 4、如果四种气质的得分很接近,之差均小于三,则属于无法判断的情况。求:如果评价列为表达式列,那么表达式如何写,如果非表达式列,那代码如何写?
|
-- 作者:大红袍 -- 发布时间:2015/11/13 11:03:00 -- A、B、C、D
比如第一种,得出A的,这样写 iif((A-B>4 OR A-B<-4) AND (A-C>4 OR A-C<-4) AND (A-D>4 OR A-D<-4),\'A\', \'否则继续其余的判断\')
得出A、B这样写 iif((A-B>4 OR A-B<-4) AND (A-C>4 OR A-C<-4) AND (A-D>4 OR A-D<-4),\'A\', iif((B-A>4 OR B-A<-4) AND (B-C>4 OR B-C<-4) AND (B-D>4 OR B-D<-4),\'B\',\'否则继续其余的判断\'))
-------------------------- 拼凑起来,就是一大段判断 |
-- 作者:大红袍 -- 发布时间:2015/11/13 11:10:00 -- 比如第一种的情况,就这样处理。其余你的,你照着逻辑写代码就行。分别判断。
Dim ary1() As String = {"A", "B", "C", "D"}
For i As Integer = 0 To ary1.Length - 1 |
-- 作者:jwt -- 发布时间:2015/11/13 11:22:00 -- 谢谢,我再捣鼓捣鼓~顺便帮我看下另一个问题吧,随机抽取5行记录,代码如下,为啥他有时显示3行、有时4行、有时5行?? Dim cnt As Integer = DataTables("题库").DataRows.Count Dim ids1 As New List(of Integer) \'用于存储洗牌前的位置 Dim ids2 As New List(of Integer) \'用于存储洗牌后的位置 For i As Integer = 0 To cnt -1 \'准备初始的牌 ids1.add(i) Next For i As Integer = 0 To cnt - 1 \'开始洗牌 ids2.Add(ids1(rand.Next(0,ids1.count))) Next Tables("题库").StopRedraw() DataTables("题库").ReplaceFor("抽取",False) For i As Integer = 0 To 5 - 1 \'5为要抽取的行数 DataTables("题库").DataRows(ids2(i))("抽取") = True Next Tables("题库").Filter = "[抽取] = True" Tables("题库").ResumeRedraw() |
-- 作者:大红袍 -- 发布时间:2015/11/13 11:30:00 -- 洗牌要这样
Dim cnt As Integer = DataTables("表A").DataRows.Count For i As Integer = 0 To cnt -1 \'准备初始的牌 For i As Integer = 1 To str.count \'洗牌测次数 For i As Integer = 0 To 5 - 1 \'5为要抽取的行数 |
-- 作者:yan2006l -- 发布时间:2015/11/13 11:35:00 -- 先数组排序,从高到低分别为 a1 a2 a3 a4 b1 = a1 - a2 b2 = a2 - a3 b3 = a3 - a4 后面代码很简单,只要对比b就可以了如下: if b1 > 4 then (就是第一种情况(单高),为什么呢:因为如果b1>4,由于a1>=a2 ,所以 a1-a3 肯定也是大于4的,a1- a4也肯定大于4.所以可以直接下结论,后面同理) elseif b1 < 3 and b2 >4 (双高) elseif b1 < 3 and b2 < 3 and b3 > 4 (三高) elseif b1 < 3 and b2 < 3 and b3 < 3 无法判断 else end if |
-- 作者:jwt -- 发布时间:2015/11/13 11:39:00 -- 额 .....代码复制过去,把表名改了后,点击按钮,没反应0.0 |
-- 作者:大红袍 -- 发布时间:2015/11/13 11:50:00 -- Tables("题库").StopRedraw() DataTables("题库").ReplaceFor("抽取",False) For i As Integer = 0 To 5 - 1 \'5为要抽取的行数 DataTables("题库").DataRows(str(i))("抽取") = True Next Tables("题库").Filter = "[抽取] = True" Tables("题库").ResumeRedraw() |
-- 作者:狐表开发 -- 发布时间:2015/11/13 15:15:00 -- 楼主,你的第一个问题做好了? |
-- 作者:jwt -- 发布时间:2015/11/18 9:45:00 -- 狐大大,没有解决,目前还是人工判断,真个系统就这个一个缺陷,好复杂0.0 |