菜鸟请教

大山情 2018-06-04 11:54:30
多数组的赋值和循环如何写
...全文
1480 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42621759 2018-07-09
  • 打赏
  • 举报
回复
多用while if语句
大山情 2018-06-27
  • 打赏
  • 举报
回复
引用 33 楼 KingOfPorcupine 的回复:
[quote=引用 30 楼 weixin_42380473 的回复:]
[quote=引用 29 楼 chewinggum 的回复:]
[quote=引用 23 楼 Chen8013 的回复:]


厉害,楼主12个字,能被你挤出那么多牙膏[/quote]
不好意思,忙了几天别的。
虽然我的问题还没有解决,但我十分感激您的指导。
我仅是一个稍微会用一点vb的菜鸟,因为需要才来改动原程序,接触后才知道自己的无知。
非常的感谢!我在努力
[/quote]
435279695@qq.com
把问题直接发来 代码给你重做好了[/quote]
KingOfPorcupine 2018-06-25
  • 打赏
  • 举报
回复
引用 30 楼 weixin_42380473 的回复:
[quote=引用 29 楼 chewinggum 的回复:]
[quote=引用 23 楼 Chen8013 的回复:]


厉害,楼主12个字,能被你挤出那么多牙膏[/quote]
不好意思,忙了几天别的。
虽然我的问题还没有解决,但我十分感激您的指导。
我仅是一个稍微会用一点vb的菜鸟,因为需要才来改动原程序,接触后才知道自己的无知。
非常的感谢!我在努力
[/quote]
435279695@qq.com
把问题直接发来 代码给你重做好了
赵4老师 2018-06-23
  • 打赏
  • 举报
回复
引用 31 楼 zhao4zhong1 的回复:
代码生成技术
了解一下

比如(尽管是C不是VB6):
//codegen.c
// 输入一组字符串,比如
// aa ss ddd dd 33 dd
// 然后自动生成一个函数 int A(const char*);
// 实现A("aa")返回0 A("ss")返回1 依次类推
#include <stdio.h>
int main(int argc,char **argv) {
int i;
if (argc<2) {
printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);
return 1;
}
//printf("#include <string.h>\n");
printf("int A(const char *a) {\n");
for (i=0;i<argc-1;i++) {
printf(" if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);
}
printf(" return -1;\n");
printf("}\n");
return 0;
}
//C:\test\Debug>codegen.exe
//codegen.exe p1 [p2 ...] [>result.c]
//Generate code int A(const char *a); 0==A("p1") 1==A("p2") ...
//C:\test\Debug>codegen.exe aa ss ddd dd 33 dd
//int A(const char *a) {
// if (0==strcmp(a,"aa")) return 0;
// if (0==strcmp(a,"ss")) return 1;
……
赵4老师 2018-06-23
  • 打赏
  • 举报
回复
代码生成技术
了解一下
大山情 2018-06-22
  • 打赏
  • 举报
回复
引用 29 楼 chewinggum 的回复:
[quote=引用 23 楼 Chen8013 的回复:]


厉害,楼主12个字,能被你挤出那么多牙膏[/quote]
不好意思,忙了几天别的。
虽然我的问题还没有解决,但我十分感激您的指导。
我仅是一个稍微会用一点vb的菜鸟,因为需要才来改动原程序,接触后才知道自己的无知。
非常的感谢!我在努力
脆皮大雪糕 2018-06-11
  • 打赏
  • 举报
回复
引用 23 楼 Chen8013 的回复:
厉害,楼主12个字,能被你挤出那么多牙膏
大山情 2018-06-11
  • 打赏
  • 举报
回复
引用 27 楼 Chen8013 的回复:
[quote=引用 26 楼 weixin_42380473 的回复:] [quote=引用 23 楼 Chen8013 的回复:] 全局数组可以这样定义:
Public arrStdData(1 To 3, 1 To 99, 0 To 11) As Integer
这样的好处是不会“浪费空间”。
需要继续请教[/quote] 代码、程序界面设计方法,都给你说完了,还有什么好请教的…… 你只要在某个“主窗口”中画个按钮,打开“输入数据”的那个窗口, 在文本框中按指定格式输入数据,点一下“更新数据”的那个按钮,   然后关闭窗口(可以在按钮事件中写句代码: Unload me)。 然后,就可以在“主窗口”中去执行数据比较的操作了。 [/quote] 谢谢您,我再来仔细消化一下
舉杯邀明月 2018-06-09
  • 打赏
  • 举报
回复
引用 26 楼 weixin_42380473 的回复:
[quote=引用 23 楼 Chen8013 的回复:] 全局数组可以这样定义:
Public arrStdData(1 To 3, 1 To 99, 0 To 11) As Integer
这样的好处是不会“浪费空间”。
需要继续请教[/quote] 代码、程序界面设计方法,都给你说完了,还有什么好请教的…… 你只要在某个“主窗口”中画个按钮,打开“输入数据”的那个窗口, 在文本框中按指定格式输入数据,点一下“更新数据”的那个按钮,   然后关闭窗口(可以在按钮事件中写句代码: Unload me)。 然后,就可以在“主窗口”中去执行数据比较的操作了。
大山情 2018-06-09
  • 打赏
  • 举报
回复
引用 23 楼 Chen8013 的回复:
全局数组可以这样定义:
Public arrStdData(1 To 3, 1 To 99, 0 To 11) As Integer
这样的好处是不会“浪费空间”。
需要继续请教
大山情 2018-06-08
  • 打赏
  • 举报
回复
舉杯邀明月: 我只会简单几个vb操作,你说的对我来说太复杂,可以加QQ请教吗?我的QQ940119968,
大山情 2018-06-07
  • 打赏
  • 举报
回复
引用 23 楼 Chen8013 的回复:
全局数组可以这样定义:
Public arrStdData(1 To 3, 1 To 99, 0 To 11) As Integer
这样的好处是不会“浪费空间”。
非常的感谢! 我还需要消化一下
赵4老师 2018-06-06
  • 打赏
  • 举报
回复
Function gc1(a1 As Integer, b1 As Integer, c1 As Integer, d1 As Integer, e1 As Integer, f1 As Integer) As Integer
    gc1 = 0
    For i = 1 To 6
        If Da(i) =  2 _
        Or Da(i) =  3 _
        Or Da(i) =  5 _
        Or Da(i) =  6 _
        Or Da(i) = 12 _
        Or Da(i) = 13 _
        Or Da(i) = 14 _
        Or Da(i) = 16 _
        Or Da(i) = 18 _
        Or Da(i) = 26 _
        Or Da(i) = 30 _
        Or Da(i) = 32 Then
            Cp(1, 1) = Cp(1, 1) + 1
        End If
    Next i
    For i = 1 To 6
        If Da(i) =  3 _
        Or Da(i) =  5 _
        Or Da(i) =  9 _
        Or Da(i) = 10 _
        Or Da(i) = 11 _
        Or Da(i) = 12 _
        Or Da(i) = 13 _
        Or Da(i) = 20 _
        Or Da(i) = 24 _
        Or Da(i) = 25 _
        Or Da(i) = 28 _
        Or Da(i) = 32 Then
            Cp(1, 2) = Cp(1, 2) + 1
        End If
    Next i
    For i = 1 To 6
        If Da(i) =  6 _
        Or Da(i) =  8 _
        Or Da(i) = 10 _
        Or Da(i) = 13 _
        Or Da(i) = 14 _
        Or Da(i) = 15 _
        Or Da(i) = 19 _
        Or Da(i) = 24 _
        Or Da(i) = 25 _
        Or Da(i) = 26 _
        Or Da(i) = 28 _
        Or Da(i) = 30 Then
            Cp(1, 3) = Cp(1, 3) + 1
        End If
    Next i
    For i = 1 To 6
        If Da(i) =  3 _
        Or Da(i) =  8 _
        Or Da(i) =  9 _
        Or Da(i) = 11 _
        Or Da(i) = 17 _
        Or Da(i) = 18 _
        Or Da(i) = 20 _
        Or Da(i) = 26 _
        Or Da(i) = 27 _
        Or Da(i) = 28 _
        Or Da(i) = 30 _
        Or Da(i) = 31 Then
            Cp(1, 4) = Cp(1, 4) + 1
        End If
    Next i
。。。

    For i = 1 To 6
        If Da(i) =  1 _
        Or Da(i) =  2 _
        Or Da(i) =  4 _
        Or Da(i) =  7 _
        Or Da(i) = 12 _
        Or Da(i) = 14 _
        Or Da(i) = 15 _
        Or Da(i) = 17 _
        Or Da(i) = 23 _
        Or Da(i) = 24 _
        Or Da(i) = 29 _
        Or Da(i) = 32 Then
            Cp(3, 98) = Cp(3, 98) + 1
        End If
    Next i
    For i = 1 To 6
        If Da(i) =  8 _
        Or Da(i) =  9 _
        Or Da(i) = 11 _
        Or Da(i) = 13 _
        Or Da(i) = 14 _
        Or Da(i) = 18 _
        Or Da(i) = 21 _
        Or Da(i) = 23 _
        Or Da(i) = 24 _
        Or Da(i) = 29 _
        Or Da(i) = 30 _
        Or Da(i) = 32 Then
            Cp(3, 99) = Cp(3, 99) + 1
    End If
    Next i
https://bbs.csdn.net/topics/380157851 请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。 试对比 图书馆(对图书的分类够结构化了吧) 和 搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索) 哪个处理信息更方便、更高效。 所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。 结构越复杂,越难修改,越难除错。 有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。 程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George 前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题;他觉得前同事们应该用这些问题来问自己;实际上不管在哪里工作的开发者们都应该经常问问自己这些问题: ◆“要保证这个问题不会再出现,我该怎么做?” ◆“要想少出些Bug,我该怎么做?” ◆“要保证Bug容易被修复,我该怎么做?” ◆“要保持对变化的快速响应,我该怎么做?” ◆“要保证我的软件的运行速度,我该怎么做?” 如果大多数团队都能不时问一下自己,必定会从中得益,因为这些都是真正强而有力的问题。
大山情 2018-06-06
  • 打赏
  • 举报
回复
Function gc1(a1 As Integer, b1 As Integer, c1 As Integer, d1 As Integer, e1 As Integer, f1 As Integer) As Integer gc1 = 0 '以下写法太复杂,数据输入时很容易出错======= For i = 1 To 6 If Da(i) = 2 Or Da(i) = 3 Or Da(i) = 5 Or Da(i) = 6 Or Da(i) = 12 Or Da(i) = 13 Or Da(i) = 14 Or Da(i) = 16 Or Da(i) = 18 Or Da(i) = 26 Or Da(i) = 30 Or Da(i) = 32 Then Cp(1, 1) = Cp(1, 1) + 1 End If Next i For i = 1 To 6 If Da(i) = 3 Or Da(i) = 5 Or Da(i) = 9 Or Da(i) = 10 Or Da(i) = 11 Or Da(i) = 12 Or Da(i) = 13 Or Da(i) = 20 Or Da(i) = 24 Or Da(i) = 25 Or Da(i) = 28 Or Da(i) = 32 Then Cp(1, 2) = Cp(1, 2) + 1 End If Next i For i = 1 To 6 If Da(i) = 6 Or Da(i) = 8 Or Da(i) = 10 Or Da(i) = 13 Or Da(i) = 14 Or Da(i) = 15 Or Da(i) = 19 Or Da(i) = 24 Or Da(i) = 25 Or Da(i) = 26 Or Da(i) = 28 Or Da(i) = 30 Then Cp(1, 3) = Cp(1, 3) + 1 End If Next i For i = 1 To 6 If Da(i) = 3 Or Da(i) = 8 Or Da(i) = 9 Or Da(i) = 11 Or Da(i) = 17 Or Da(i) = 18 Or Da(i) = 20 Or Da(i) = 26 Or Da(i) = 27 Or Da(i) = 28 Or Da(i) = 30 Or Da(i) = 31 Then Cp(1, 4) = Cp(1, 4) + 1 End If Next i 。。。 For i = 1 To 6 If Da(i) = 1 Or Da(i) = 2 Or Da(i) = 4 Or Da(i) = 7 Or Da(i) = 12 Or Da(i) = 14 Or Da(i) = 15 Or Da(i) = 17 Or Da(i) = 23 Or Da(i) = 24 Or Da(i) = 29 Or Da(i) = 32 Then Cp(3, 98) = Cp(3, 98) + 1 End If Next i For i = 1 To 6 If Da(i) = 8 Or Da(i) = 9 Or Da(i) = 11 Or Da(i) = 13 Or Da(i) = 14 Or Da(i) = 18 Or Da(i) = 21 Or Da(i) = 23 Or Da(i) = 24 Or Da(i) = 29 Or Da(i) = 30 Or Da(i) = 32 Then Cp(3, 99) = Cp(3, 99) + 1 End If Next i
舉杯邀明月 2018-06-06
  • 打赏
  • 举报
回复
全局数组可以这样定义:
Public arrStdData(1 To 3, 1 To 99, 0 To 11) As Integer
这样的好处是不会“浪费空间”。
舉杯邀明月 2018-06-06
  • 打赏
  • 举报
回复
参考一下这个处理方法。 (当然也许有“更合理的数据更新”方式;但不清楚你的具体应用环境,没法去“猜”) 1. 因你的“每组对比数据”是12个,对应要处理一个“3×99”的数组。在标准模块中定义一个全局数组:
Public arrStdData(3, 99, 11) As Integer
2. 数据“动态更新接口”:  假设添加一个窗口,在其中画一个 TextBox 用于输入数据。画一个命令按钮,用于执行数据更新。  TextBox的 MultiLine设置为True(这个只能设计时设置);ScrollBars属性设置为2 --- 垂直滚动条。  TextBox控件的宽度足够大,要保证每行数据都能显示完,没必要用水平滚动条。  输入的数据格式是:   每一行是“一组数据(12个数)”,数据间用英文逗号分隔,如16中Call DataSplit( ) 中的每条数据一样;   输入的数据,第1行对应 Cp(1, 1)用的,第2行对应 Cp(1, 2)用的,第3行对应 Cp(1, 3)用的……     第99行对应 Cp(1, 9)用的,第100行对应 Cp(2, 1)用的……其余类推。   注意输入的文本数据,每行12个、必须有297行(更多的行忽略,不会引起异常)。  处理代码如下:
Option Explicit

Private Sub Command1_Click()
' 更新数据
   Dim arrDataL() As String
   Dim arrDataC() As String
   Dim i&, j&, k&, w As Long

   arrDataL() = Split(Text1.Text, vbCrLf)
   w = 0&
   For j = 1 To 3
      For i = 1 To 99
         arrDataC() = Split(arrDataL(w))
         For k = 0 To 11
            arrStdData(j, i, k) = Val(arrDataC(k))
         Next
         w = 1& + w
      Next
   Next
End Sub
3.  数据比较调用处理:
Private Function DataCompare(InBuff() As Integer, ByVal nValue As Integer) As Boolean
   Dim i&, w As Long
 
   w = UBound(InBuff())
   For i = 0& To w
      If (nValue = InBuff(i)) Then Exit For
   Next
   DataCompare = (i <= w)
End Function
 
Private Function gc1(a1 As Integer, b1 As Integer, c1 As Integer, _
                        d1 As Integer, e1 As Integer, f1 As Integer) As Integer
   Dim arrData() As Integer
   Dim i&, j&, k As Long

   gc1 = 0
   For j = 1 To 3
      For i = 1 To 99
         ' 提取数据:
         For k = 1& To 11
            arrData(k) = arrStdData(j, i, k)
         Next
         ' 数据对比及计数累加:
         For k = 1 To 6
            If DataCompare(arrData(), Da(k)) Then Cp(j, i) = Cp(j, i) + 1
         Next
      Next
   Next
   ' 你的其它处理代码……
End Function
大山情 2018-06-06
  • 打赏
  • 举报
回复
引用 20 楼 Chen8013 的回复:
象你现在的搞法,有 3×99 = 297组数据,对吧! 就算按我16楼的方式,那个“代码片段”也是接近1200行(按300组数据,简算)。 但若按“数据源”提供数据的方式,肯定可以在15行代码以内搞定。 当然,“数据源”的数据提取,还有一部分代码,但也不过就是30行左右的事。
请教你的方法
舉杯邀明月 2018-06-06
  • 打赏
  • 举报
回复
象你现在的搞法,有 3×99 = 297组数据,对吧! 就算按我16楼的方式,那个“代码片段”也是接近1200行(按300组数据,简算)。 但若按“数据源”提供数据的方式,肯定可以在15行代码以内搞定。 当然,“数据源”的数据提取,还有一部分代码,但也不过就是30行左右的事。
舉杯邀明月 2018-06-06
  • 打赏
  • 举报
回复
引用 18 楼 weixin_42380473 的回复:
[quote=引用 17 楼 Chen8013 的回复:] 若是有“有效的数据源”来代替 相应的Call DataSplit(arrData(), "2, 3, 5, 6, 12, 13, 14, 16, 18, 26, 30, 32") Function gc1( ) 的函数体会变成一个简单的“二重循环”,整个函数体可能就只有10行左右了。
数据来源是会变化的,所以一变化就要重新输入,我的目的就是要简化每次的输入。[/quote] 你这不是废话吗…… 你要“更改数据”,自己更改 Call DataSplit(arrData(), ". . . . . . .") 后面的那串数据就行了啊,别的地方又不需要动。 再说了,你要“更改”,总得要有“更改依据”吧! 要我来写,根本就用不着改代码,直接提交“新数据”就行了。 反正数据是“从其它地方来的”,用文件来进行“数据”提交就很方便,   甚至可以直接弄个窗口,把“新数据”Ctrl+C 、Ctrl+V 输入,点个按钮更新一下就好了……
舉杯邀明月 2018-06-06
  • 打赏
  • 举报
回复
若是有“有效的数据源”来代替 相应的Call DataSplit(arrData(), "2, 3, 5, 6, 12, 13, 14, 16, 18, 26, 30, 32") Function gc1( ) 的函数体会变成一个简单的“二重循环”,整个函数体可能就只有10行左右了。
加载更多回复(14)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧