Delphi 交换Edit1中的元素

Delphi 交换Edit1中的元素,delphi,pascal,lazarus,Delphi,Pascal,Lazarus,我有一个Edit1,您可以在其中键入像22010-3这样的数字,当您单击按钮1时,它会显示最大和最小数字max=20min=-3。 当我拿出数字时,它交换了Edit1中的min和max数字,就像2-31020一样,我用自己的方式尝试了,但其他输入的数字改变了位置。 我尝试了很多方法: Edit4.Text:= (inttostr(min)+' '+ inttostr(max)); 但它覆盖了其他数字 然后我试着用 maxnumb := Edit4 Edit4.Text := Strin

我有一个
Edit1
,您可以在其中键入像
22010-3
这样的数字,当您单击
按钮1
时,它会显示最大和最小数字max=20min=-3。 当我拿出数字时,它交换了
Edit1
中的
min
max
数字,就像
2-31020
一样,我用自己的方式尝试了,但其他输入的数字改变了位置。 我尝试了很多方法:

 Edit4.Text:= (inttostr(min)+' '+ inttostr(max)); 
但它覆盖了其他数字

然后我试着用

maxnumb := Edit4

Edit4.Text  := StringReplace(maxnumb, inttostr(max), inttostr(min),
                          [rfReplaceAll, rfIgnoreCase]); 

Edit1.Text  := StringReplace(maxnumb, inttostr(min), inttostr(max),
                          [rfReplaceAll, rfIgnoreCase]); 
但它只交换了第一个数字,当我再次点击
按钮1时,它交换了第二个数字

不尝试交换的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  oSL: TStringlist;
  s, ss: string;
  a: array [1 .. 15] of integer;
  i, j, k, p, code: integer;
  max, min: integer;
  before, after: string;
begin
  s := Edit1.Text;
  s := concat(s, #32);
  i := 0;
  while Length(s) > 0 do
  begin
    i := i + 1;
    p := pos(#32, s);
    ss := copy(s, 1, p - 1);
    Val(ss, k, code);
    a[i] := k;
    delete(s, 1, p);
  end;
  // Max
  max := a[1];
  For j := 1 to i do
    if max < a[j] then
      max := a[j];
  // Min
  min := a[1];
  For j := 1 to i do
    if min > a[j] then
      min := a[j];
  // Put out Max/Min
  Edit3.Text := IntToStr(max);
  Edit2.Text := IntToStr(min);
end;
procedure TForm1.按钮1点击(发送方:TObject);
变量
oSL:TStringlist;
s、 ss:字符串;
a:整数的数组[1..15];
i、 j,k,p,代码:整数;
最大值,最小值:整数;
前后:字符串;
开始
s:=Edit1.Text;
s:=concat(s,#32);
i:=0;
当长度大于0时
开始
i:=i+1;
p:=pos(#32,s);
ss:=副本(s,1,p-1);
Val(ss,k,code);
a[i]:=k;
删除(s,1,p);
结束;
//马克斯
max:=a[1];
对于j:=1,我需要
如果maxa[j],则
min:=a[j];
//输出最大/最小值
Edit3.Text:=IntToStr(最大值);
Edit2.Text:=IntToStr(最小值);
结束;
使用
类型、花柱;
函数排列(const-AEditFrom,AEditTo:TEdit):布尔;
变量
_StrArr:TStringDynArray;
i:整数;
_IntArr:整数数组;
_IntValue:整数;
_Min:整数;
_Max:整数;
开始
结果:=假;
如果未分配(AEDITFORM),则
出口
如果未分配(AEditTo),则
出口
_StrArr:=拆分字符串(AEditFrom.Text“”);
设置长度(_intar,Length(_StrArr));
对于i:=0到长度(_StrArr)-1 do
开始
如果不是TryStrToInt(_StrArr[i],_IntValue),则
出口
_intar[i]:=\u IntValue;
结束;
伊迪托·克利;
_最小值:=_intar[0];
_最大值:=_intar[0];
对于i:=0到长度(_intar)-1 do
开始
如果_intar[i]>\u Max那么
_最大值:=_intar[i];
如果_intar[i]<\u Min那么
_最小值:=_intar[i];
结束;
AEditTo.Text:=字符串替换(AEDITFORM.Text,+IntToStr(_Min),
“…”+IntToStr(_Max),[rfReplaceAll,rfIgnoreCase]);
AEditTo.Text:=StringReplace(AEditTo.Text),+IntToStr(_Max),
''+IntToStr(_Min),[rfReplaceAll,rfIgnoreCase]);
AEditTo.Text:=StringReplace(AEditTo.Text,“…”,“,
[rfReplaceAll,rfIgnoreCase]);
结果:=真;
结束;
程序TForm1.BitBtn1Click(发送方:TObject);
开始
如果不安排(Edit1、Edit2),则
ShowMessage('出现问题。列表中不包含整数?');
结束;

测试:22010-3,结果:2-3100

请回答您的问题,不清楚:在
22010-3
中交换最小值和最大值不会返回
2-32010
,而是
2-3100
。要解决此问题,请停止StringReplace尝试。只需解析Edit.Text中的所有数字,对整数数组进行处理,然后将它们全部连接回Edit.Text什么类型是maxnumb?如果它是一个字符串,那么第一行“maxNum:=edit4”将不会编译。如果它是一个编辑框,那么stringreplace将不会编译。请检查您的问题中是否有正确的代码啊MaxNum是一个字符串,我将尝试在没有stringreplace的情况下执行操作。现在我收到一个错误unit1。pas(72,23)错误:为调用“CompareReal”
函数CompareReal指定的参数数目错误(列表:TStringList;Index1,Index2:Integer):Integer;开始//在单元数学结果中使用比较器:=CompareValue(StrToFloat(List[Index1]),StrToFloat(List[Index2]);结束只要我使用代码,就不会在本单元中找到标识符SplitString,如答案所示:
System.StrUtils.SplitString
uses
  Types, StrUtils;

function Arrange(const AEditFrom, AEditTo: TEdit): Boolean;
var
  _StrArr: TStringDynArray;
  i: integer;
  _IntArr: array of integer;
  _IntValue: integer;
  _Min: integer;
  _Max: integer;
begin
  Result := False;

  if not Assigned(AEditFrom) then
    Exit;
  if not Assigned(AEditTo) then
    Exit;

  _StrArr := SplitString(AEditFrom.Text, ' ');
  SetLength(_IntArr, Length(_StrArr));

  for i := 0 to Length(_StrArr) - 1 do
  begin
    if not TryStrToInt(_StrArr[i], _IntValue) then
      Exit;

    _IntArr[i] := _IntValue;
  end;

  AEditTo.Clear;
  _Min := _IntArr[0];
  _Max := _IntArr[0];
  for i := 0 to Length(_IntArr) - 1 do
  begin
    if _IntArr[i] > _Max then
      _Max := _IntArr[i];

    if _IntArr[i] < _Min then
      _Min := _IntArr[i];
  end;

  AEditTo.Text := StringReplace(AEditFrom.Text, ' ' + IntToStr(_Min),
    '...' + IntToStr(_Max), [rfReplaceAll, rfIgnoreCase]);

  AEditTo.Text := StringReplace(AEditTo.Text, ' ' + IntToStr(_Max),
    ' ' + IntToStr(_Min), [rfReplaceAll, rfIgnoreCase]);

  AEditTo.Text := StringReplace(AEditTo.Text, '...', ' ',
    [rfReplaceAll, rfIgnoreCase]);

  Result := True;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if not Arrange(Edit1, Edit2) then
    ShowMessage('Something went wrong. List contains not a integer?');
end;