首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 我的第一个问题 [已结贴,结贴人:heyueyuyu]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • heyueyuyu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-03-26 17:51:09 楼主
    Private Sub Command1_Click()
        Dim a As Variant
        a = Array(10, 5, 30, 450, 45, 78, 89, 4, 36)
        '排序
          For i = 1 To 9
            k = i
            For j = i + 1 To 10
                If a(j) < a(k) Then k = j
            Next j
            If k <> i Then
                    tmp = a(k)
                    a(k) = a(i)
                    a(i) = tmp
            End If
            Next i
           
           
    End Sub
    以上是我对10,5,30,450,45,78,89,4,36从小到大排序所编的程序,可是不能运行,为什么?
    该帖包含附件:http://dl2.csdn.net/down4/20080326/26175048265.vbp
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vbman2003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-26 18:01:211楼 得分:1
    数组a是从0开始的:
    For i = 1 To 9 --> For i = lbound(a) To ubound(a)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vbman2003
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-26 18:04:172楼 得分:1
    还有For j = i + 1 To ubound(a)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cbm666
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-03-26 19:01:323楼 得分:5
    '添加 Command1  Command2

    Option Explicit
    Dim i&, j&, k&, t&, a()
    Private Sub Form_Load()
      a = Array(10, 5, 30, 450, 45, 78, 89, 4, 36)
      Command1.Caption = "由小到大"
      Command2.Caption = "由大到小"
    End Sub

    Private Sub Command1_Click()
      Me.Cls
      For i = 0 To UBound(a)
          k = i
          For j = i + 1 To UBound(a)
            If a(k) > a(j) Then k = j '大小排序的代码差别只在于 > 与 <
          Next j
          t = a(i): a(i) = a(k): a(k) = t
      Next i
      For i = 0 To UBound(a)
          Print a(i);
      Next i
    End Sub

    Private Sub Command2_Click()
      Me.Cls
      For i = 0 To UBound(a)
          k = i
          For j = i + 1 To UBound(a)
            If a(k) < a(j) Then k = j
          Next j
          t = a(i): a(i) = a(k): a(k) = t
      Next i
      For i = 0 To UBound(a)
          Print a(i);
      Next i
    End Sub

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cbm666
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-03-26 19:07:514楼 得分:2
    '看懂上面大小排序的代码后, 再理解此简化方式的代码
    '下面这个代码培养你代码共用的思维, 因为在其它用途上AB有可能是01234... 这时你就可以用Select Case

    Option Explicit
    Dim i&, j&, k&, t&, a(), AB%
    Private Sub Form_Load()
      a = Array(10, 5, 30, 450, 45, 78, 89, 4, 36)
      Command1.Caption = "由小到大"
      Command2.Caption = "由大到小"
    End Sub

    Private Sub Command1_Click()
      AB = 0
      Call ShowResult
    End Sub

    Private Sub Command2_Click()
      AB = 1
      Call ShowResult
    End Sub

    Sub ShowResult()
      Me.Cls
      For i = 0 To UBound(a)
          k = i
          For j = i + 1 To UBound(a)
            If AB = 0 Then
                If a(k) > a(j) Then k = j
            Else
                If a(k) < a(j) Then k = j
            End If
          Next j
          t = a(i): a(i) = a(k): a(k) = t
      Next i
      For i = 0 To UBound(a)
          Print a(i);
      Next i
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cbm666
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-03-26 19:19:125楼 得分:2
    '刚吃过饭有点闲, 呵呵.....
    '看你发这个帖,"猜测" 你是新手, 所以藉此机会多给你一些

    '平时养成使用数组化控件更可以优化代码,以后较容易维护与纠错.

    '先添加Command1 复制粘贴Command1此时会提示创建控件数组吗?你选择 是
    '当然你可以在属性窗里面直接设置 index 值

    '本代码需要 Command1(0) 与 Command1(1)

    Option Explicit
    Dim i&, j&, k&, t&, a()

    Private Sub Form_Load()
      a = Array(10, 5, 30, 450, 45, 78, 89, 4, 36)
      Command1(0).Caption = "由小到大"
      Command1(1).Caption = "由大到小"
    End Sub

    Private Sub Command1_Click(Index As Integer)
      Call ShowResult(Index)
    End Sub

    Sub ShowResult(AB%)
      Me.Cls
      For i = 0 To UBound(a)
          k = i
          For j = i + 1 To UBound(a)
            If AB = 0 Then
                If a(k) > a(j) Then k = j
            Else
                If a(k) < a(j) Then k = j
            End If
          Next j
          t = a(i): a(i) = a(k): a(k) = t
      Next i
      For i = 0 To UBound(a)
          Print a(i);
      Next i
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • clear_zero
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-26 20:16:446楼 得分:0
    For i = lbound(a) To ubound(a) 
    For j = i + 1 To ubound(a)


    '--------------------------
    欢迎来我的小店: http://shop35544104.taobao.com/
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kangguiwen
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-26 20:52:207楼 得分:2
    Private Sub Form_Click()
    Dim a, atm As Variant
    Dim arry(9) As Integer
    arry(1) = 10: arry(2) = 5: arry(3) = 30: arry(4) = 450: arry(5) = 45: arry(6) = 78: arry(7) = 89: arry(8) = 4: arry(9) = 36
       
    For i = 1 To 9
    For j = i To 9
    If arry(i) > arry(j) Then
      atm = arry(i)
      arry(i) = arry(j)
      arry(j) = atm
    End If
    Next j
    Next i
    For i = 1 To 9
    Print arry(i)
    Next i
    这样也可以呀

    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • waaoo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-27 14:58:458楼 得分:1
    都是猛人,看不懂!!!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bleach210
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-28 13:12:129楼 得分:6
    确定数组个数时可以这样写,比楼主只是多加了行代码,还有改了j=1+1 to 9

    不过还是建议写成Ubound(a)  Lbound(a)

    Option Base 1

    Private Sub Command1_Click()
        Dim a() As Variant
        a = Array(10, 5, 30, 450, 45, 78, 89, 4, 36)
        '排序
        For i = 1 To 9
            k = i
            For j = i + 1 To 9
                If a(j) < a(k) Then k = j
            Next j
            If k <> i Then
                    tmp = a(k)
                    a(k) = a(i)
                    a(i) = tmp
            End If
        Next i
        For i = 1 To 9
        Print a(i)
        Next i
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bleach210
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-28 13:13:1610楼 得分:10
    我的已经在vb6.0中运行过了

    我只是多加了输出语句

    楼主没加所以看不到运行结果
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved