| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1114 人关注过本帖
标题:新手请教!下面的代码那里有问题??
只看楼主 加入收藏
liu_delphi
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
新手请教!下面的代码那里有问题??
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    ListBox1: TListBox;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   NumB: array[1..20] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
num1,i,j,k,setnum:integer;
sets1,sets:string;
begin
//NumB
sets:=Form1.Edit1.Text;
num1:=1;
if copy(sets,length(sets),1)<> ',' then sets:=edit1.Text+',';
while sets <> ' ' do
begin
  setnum:=pos(',',sets); //,号在字串中的当前值
  sets1:=copy(sets,1,setnum-1);  // 把,号之后的值存入变量sets1
  NumB[num1]:=strtoint(sets1);  //把输出框中的值存入数组
  sets:=copy(sets,setnum+1,length(sets)-setnum);//把已存入的数值之后的内容存入sets中,以便下次环
  num1:=num1+1;
end;
for i:=1 to 19 do  //冒泡法排序(选择法)
  begin
    k:=i;          //小的数的记数器
 // j:=i+1;
    for j:=i+1 to 19 do
    if NumB[j]<NumB[k] then k:=j;
    if i<>k then
      begin

  //    Numb[i]:=Numb[k]+Numb[i];    //交换比较的两个数
 //     Numb[k]:=Numb[i]-Numb[k];
 //     Numb[i]:=Numb[i]-Numb[k];
      end;
  end;
  for i:=1 to 20 do
    if numb[i]<>0 then listbox1.items.add(intTostr(numb[i]));
    //向listbox中写数据,但不写0

end;
end.
========================
*编译没有问题,运行在edit1 框中输入数字后,却会弹出:

Project1.exe raised exception class econverterror with message''' is not a vilad integer value'. process stopped,use step or run to continue.

???
''不是整形??我想了半天都找不出是什么出了问题,

那位高手帮帮我!!!

搜索更多相关主题的帖子: 代码 
2010-09-18 21:50
liu_delphi
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-18
收藏
得分:0 
程序的功能是:在文本框中输入20个以内的数字后,系统从大到小输出这20个数字。

2010-09-18 21:53
liu_delphi
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-18
收藏
得分:0 
难道是我的问题太深了?????这里面的高手不屑???
2010-09-19 16:24
yeye55
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:152
注 册:2007-1-19
收藏
得分:10 
NumB[num1]:=strtointdef(sets1,0);  

我的百度空间→http://hi.baidu.com/yeye55
2010-09-19 18:43
liu_delphi
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-18
收藏
得分:0 
以下是引用yeye55在2010-9-19 18:43:06的发言:

NumB[num1]:=strtointdef(sets1,0);  
你好,。。。这样改也是会出现:

project1.exe faulted with message: ' access violation at 0x0000000: read of address 0x00000'的错语。。

0x000000内存读错误!


还有我不明白,strtointdef(sets1,0),,是预编绎吗??
2010-09-19 18:54
yeye55
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:152
注 册:2007-1-19
收藏
得分:0 
procedure TForm1.Button1Click(Sender: TObject);
var
    sid,i,j,k,n : integer;
    s,sets : string;
begin
    sets:=Edit1.Text;
    if sets[length(sets)]<>',' then sets:=sets+',';

    sid:=1;
    for i:=1 to 20 do
    begin
        s:='';
        while (sid<=Length(sets)) and (sets[sid]<>',') do
        begin
            s:=s+sets[sid];
            sid:=sid+1;
        end;
        sid:=sid+1;

        NumB[i]:=StrToIntDef(s,0);
    end;

    for i:=1 to 20 do  //冒泡法排序(选择法)
    begin
        k:=i;          //小的数的记数器
        for j:=i to 20 do
            if NumB[j]>NumB[k] then k:=j;

        if i<>k then
        begin
            n:=NumB[i];       //交换比较的两个数
            NumB[i]:=NumB[k];
            NumB[k]:=n;
        end;
    end;

    for i:=1 to 20 do
        if numb[i]<>0 then listbox1.items.add(intTostr(numb[i]));
    //向listbox中写数据,但不写0

end;

我的百度空间→http://hi.baidu.com/yeye55
2010-09-20 19:03
ouyang_paul
Rank: 2
等 级:论坛游民
帖 子:14
专家分:45
注 册:2010-9-16
收藏
得分:10 
看看
2010-09-20 23:13
快速回复:新手请教!下面的代码那里有问题??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016169 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved