CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

为何排序会排出12比3小?

楼主powerc1(powerc1)2003-12-01 22:36:13 在 Web 开发 / ASP 提问

程序如下test.asp:  
  <html>  
  <head>  
  <title></title>  
  </head>  
  <body>  
  <%  
  dim   hmsz(5)  
  for   i=1   to   5  
  hmsz(i)=trim(request.form("hm"&i))  
  next  
  response.write   "排序前:"&hmsz(1)&"、"&hmsz(2)&"、"&hmsz(3)&"、"&hmsz(4)&"、"&hmsz(5)&"<br>"  
    for   i=1   to   5  
          for   j=i+1   to   5  
                  if   hmsz(i)>hmsz(j)   then  
                        hmsz(0)=hmsz(i)  
                        hmsz(i)=hmsz(j)  
                        hmsz(j)=hmsz(0)  
                  end   if  
          next    
      next  
    response.write   "排序后:"&hmsz(1)&"、"&hmsz(2)&"、"&hmsz(3)&"、"&hmsz(4)&"、"&hmsz(5)  
  %>  
  <p   align="center"><font   color="black"   size="6"><b>请输入数据</b></font></p>  
  <div   align="center"><center><table   border="1"   cellspacing="0"   width="68%"   bgcolor="#F0F8FF"   bordercolorlight="#4DA6FF"   bordercolordark="#ECF5FF">  
  <tr>  
  <td   width="15%"   align="center"   bgcolor="#0080c0"><font   color="#FFFFFF"><strong>数字1</strong></font></td>  
  <td   width="15%"   align="center"   bgcolor="#0080c0"><font   color="#FFFFFF"><strong>数字2</strong></font></td>  
  <td   width="15%"   align="center"   bgcolor="#0080c0"><font   color="#FFFFFF"><strong>数字3</strong></font></td>  
  <td   width="15%"   align="center"   bgcolor="#0080c0"><font   color="#FFFFFF"><strong>数字4</strong></font></td>  
  <td   width="15%"   align="center"   bgcolor="#0080c0"><font   color="#FFFFFF"><strong>数字5</strong></font></td>  
  </tr>  
  <tr><form   name="Frm"   method=post     >  
  <td   width="15%"   align="center"><input   type='text'   name="hm1"   size="2"   maxlength="2"   ></td>  
  <td   width="15%"   align="center"><input   type='text'   name="hm2"   size="2"   maxlength="2"   ></td>  
  <td   width="15%"   align="center"><input   type='text'   name="hm3"   size="2"   maxlength="2"   ></td>  
  <td   width="15%"   align="center"><input   type='text'   name="hm4"   size="2"   maxlength="2"   ></td>  
  <td   width="15%"   align="center"><input   type='text'   name="hm5"   size="2"   maxlength="2"   ></td>  
  </tr>  
  <tr><td   colspan="7"   align="center">  
  <input   type='submit'   value="添加"   name="add"   >&nbsp;&nbsp;&nbsp;  
  <input   type='reset'   value="清除"   name="clear">  
  </td></tr>  
  </form>  
  </table>  
  </center></div>  
  </body>  
  </html>  
  当输入的数全部们1位数或2位数时可以排序正确,但当输入的数有1位数和2位数混合时就不正确了,排出来的数是数字的第1位数小的先,如:12比3小  
  问题点数:0、回复次数:16Top

1 楼inelm(木野狐)回复于 2003-12-01 22:59:48 得分 0

你用的是字符串的比较,   由于是一位一位的比较,   所以得出错误的结果。  
   
  只要把字符串转化为整数进行比较即可。  
   
  如:  
  a   =   "12"  
  b   =   "3"  
   
  你原先这样比较:   if   a   >   b   then   ...   ,   这个条件的结果是   false  
   
  改成:     if   cint(a)   >   cint(b)   then   ...,     结果就变成   true   了  
   
  //   ------------------  
  //   Archimond   阿克蒙德  
  Top

2 楼net_lover(【孟子E章】)回复于 2003-12-01 23:00:13 得分 0

hmsz(i)=CLng(trim(request.form("hm"&i)))Top

3 楼chenliang0629(狼)回复于 2003-12-01 23:02:35 得分 0

错误原因:没有将变量转化成数字型,默认是按字符型在做比较,即按从左到右的顺序比较第一位、第二位……  
  只需将第九行改为:  
  hmsz(i)=cint(request.form("hm"&i))  
  即可了。Top

4 楼milanrain(ljfdlkaj)回复于 2003-12-01 23:37:48 得分 0

呵呵   我以前也碰到过这个问题   简单想想不就是实际上程序在比较第一位数字嘛   如果第一位的比较成立拉它就不往下比较拉   很显然12中的“1”没有3中的“3”大,这样的结果是字符比较造成的!   所以最好就像net_lover所说的那样的转换成实数再比较,或者转化成整数,用  
  cint()函数!Top

5 楼powerc1(powerc1)回复于 2003-12-01 23:37:50 得分 0

谢谢各位大侠指点,问题解决了,不过   chenliang0629(chen)大虾,的hmsz(i)=cint(request.form("hm"&i))去掉了trim,如果用户前后误输入的空格怎么办?如果不要trim又会类型不匹配,唉...   ...Top

6 楼freespace520(自由人)回复于 2003-12-02 09:07:12 得分 0

那你再用个类型转换的函数呀  
  比如说:clng()Top

7 楼powerc1(powerc1)回复于 2003-12-02 23:14:52 得分 0

在哪用?Top

8 楼h2high(菜乌?比菜鸟差一点:))回复于 2003-12-02 23:26:03 得分 0

人家   net_lover(孟子E章)   (   )不是去了空格再转的吗?  
   
  hmsz(i)=CLng(trim(request.form("hm"&i)))  
   
  先trim再clng或cint什么的都行  
   
   
  Top

9 楼powerc1(powerc1)回复于 2003-12-03 19:28:34 得分 0

用hmsz(i)=CLng(trim(request.form("hm"&i))),系统提示出错,“类型不匹配”Top

10 楼zhengxianping(丫丫)回复于 2003-12-03 21:54:10 得分 0

哥们检查类型呀,要了解一下比较的原理呀Top

11 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2003-12-03 23:34:27 得分 0

hmsz(i)=cdbl(trim(request.form("hm"&i)))  
   
   
  函数名称决定返回类型,如下所示:  
   
  函数   返回类型   expression   参数范围    
  CBool     Boolean   任何有效的字符串或数值表达式。    
  CByte     Byte   0   至   255。    
  CCur   Currency   -922,337,203,685,477.5808   至922,337,203,685,477.5807。    
  CDate   Date   任何有效的日期表达式。    
  CDbl   Double     负数从   -1.79769313486232E308   至   -4.94065645841247E-324;正数从   4.94065645841247E-324   至   1.79769313486232E308。    
  CDec   Decimal   零变比数值,即无小数位数值,为    
  +/-79,228,162,514,264,337,593,543,950,335。对于   28   位小数的数值,范围则为    
  +/-7.9228162514264337593543950335;最小的可能非零值是   0.0000000000000000000000000001。    
  CInt   Integer   -32,768   至   32,767,小数部分四舍五入。    
  CLng   Long   -2,147,483,648   至   2,147,483,647,小数部分四舍五入。    
  CSng   Single   负数为   -3.402823E38   至   -1.401298E-45;正数为   1.401298E-45   至   3.402823E38。    
  CStr   String   依据   expression   参数返回   Cstr。    
  Top

12 楼opolmzy(ASP)( 一寸木)回复于 2003-12-19 12:04:46 得分 0

递归方法  
   
  今天面试刚好有一道题是排序的  
  呵呵  
   
  Top

13 楼azh9703(九百九十九朵煤气罐)回复于 2003-12-19 13:49:20 得分 0

排序方法用   冒泡排序法Top

14 楼jfly301(海浪~~)回复于 2003-12-19 14:02:47 得分 0

这是很基本的问题,大家都说出来了,  
  我也用不做说了,多调试就会明白了,。Top

15 楼JohnsonPoon(1分钱买2个我)回复于 2003-12-19 14:21:26 得分 0

把数值位数不足补零再按字符排就可以了  
  Top

16 楼hnfz123(hnfz)回复于 2003-12-19 14:39:46 得分 0

数据类型问题,  
  如果是字符   12   比   3   小  
  如果是数字   12   比   3   大Top

相关问题

  • dxdbgrid为何无法排序?
  • 排序,排序
  • 排序
  • 排序
  • 排序
  • 排序
  • 排序。
  • 冒泡排序,我的为何不对?
  • 请问:为何排序错误?
  • 想问一下,数组中的排序,比如冒泡排序,插入排序,快速排序。。。

关键词

  • 数字
  • 排序
  • hmsz
  • next

得分解答快速导航

  • 帖主:powerc1

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo