Foxtable(狐表)用户栏目专家坐堂 → [求助]超费脑的逻辑判断,求传说级出来指点下~


  共有3154人关注过本帖树形打印复制链接

主题:[求助]超费脑的逻辑判断,求传说级出来指点下~

帅哥哟,离线,有人找我吗?
jwt
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:204 积分:2037 威望:0 精华:0 注册:2015/3/6 17:12:00
[求助]超费脑的逻辑判断,求传说级出来指点下~  发帖心情 Post By:2015/11/13 10:42:00 [只看该作者]

我弄了个测评记录软件,根据得分自动给出评价,但是有个气质类型的判断,太复杂了,上来求教
这是气质类型的判断方法:
1、如果某类气质得分明显高出其他三种,均高出4分以上,则属于该种气质类型。

2、如果两种气质类型的得分很接近,两者之差小于3,但同时又明显高于其他两种类型,其高出部分超过4分以上者,则属于两种气质的混合型。

3、如果三种气质的得分很接近,之差均小于3,但又明显高于第四种者,且超过4分以上,则属于三种气质的混合型。

4、如果四种气质的得分很接近,之差均小于三,则属于无法判断的情况。

求:如果评价列为表达式列,那么表达式如何写,如果非表达式列,那代码如何写?
附软件的气质类型界面。
此主题相关图片如下:1.png
按此在新窗口浏览图片

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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','否则继续其余的判断'))

 

-------------------------- 拼凑起来,就是一大段判断


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/13 11:10:00 [只看该作者]

比如第一种的情况,就这样处理。其余你的,你照着逻辑写代码就行。分别判断。

 

Dim ary1() As String = {"A", "B", "C", "D"}
Dim ary2() As Integer = {-3, 7,  -1, -11}

 

For i As Integer = 0 To ary1.Length - 1
    Dim flag As Boolean = True
    For j As Integer = 0 To ary2.length - 1
        If i<>j AndAlso Math.Abs(ary2(i)-ary2(j)) < 4 Then
            flag = False
            Exit For
        End If
    Next
    If flag  = True Then
        msgbox(ary1(i))
        Return Nothing
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
jwt
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:204 积分:2037 威望:0 精华:0 注册:2015/3/6 17:12:00
  发帖心情 Post By: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()

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/13 11:30:00 [只看该作者]

洗牌要这样

 

Dim cnt As Integer = DataTables("表A").DataRows.Count
Dim str As New List(of Integer) '用于存储洗牌前的位置

For i As Integer = 0 To cnt -1 '准备初始的牌
    str.add(i)
Next

For i As Integer = 1 To str.count '洗牌测次数
    Dim rnum1 As Integer = Rand.Next(str.count -1)
    Dim rnum2 As Integer = Rand.Next(str.count -1)
    Dim temp As String = str(rnum1)
    str(rnum1) = str(rnum2)
    str(rnum2) = temp   
Next

For i As Integer = 0 To 5 - 1 '5为要抽取的行数
    output.show(str(i))
Next


 回到顶部
帅哥哟,离线,有人找我吗?
yan2006l
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:431 积分:3214 威望:0 精华:2 注册:2011/9/10 21:35:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:204 积分:2037 威望:0 精华:0 注册:2015/3/6 17:12:00
  发帖心情 Post By:2015/11/13 11:39:00 [只看该作者]

额 .....代码复制过去,把表名改了后,点击按钮,没反应0.0

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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()

 回到顶部
帅哥哟,离线,有人找我吗?
狐表开发
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:194 积分:1168 威望:0 精华:0 注册:2015/6/8 21:38:00
  发帖心情 Post By:2015/11/13 15:15:00 [只看该作者]

楼主,你的第一个问题做好了?

 回到顶部
帅哥哟,离线,有人找我吗?
jwt
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:204 积分:2037 威望:0 精华:0 注册:2015/3/6 17:12:00
  发帖心情 Post By:2015/11/18 9:45:00 [只看该作者]

狐大大,没有解决,目前还是人工判断,真个系统就这个一个缺陷,好复杂0.0

 回到顶部
总数 19 1 2 下一页