Autor Beitrag
SchwiegerSohn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 05.04.05 11:21 
Hi,
Ich versuche grade diesen Java Code nach Delphi zu übersetzen.
Soweit ich den Code verstanden habe...
benutzt der Code die Var aobj wie ein Baum Array..
Ich denke in delphi müsste die Var dafür dann in etwa so aussehen :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Type Myvar = Record
  A:String;
  B:Array[0..1of MyVar;
end;

...
Var aobj : Array[0..1]of MyVar;

Leider geht das so in delphi nicht..
Ich keine Ahnung wie ich das in delphi realiesieren kann...

Hier der Original Code
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
    private boolean equals(Object aobj[], String s, int i, int j)
    {
        if(j == 0)
        {
            aobj[1] = s;
            return aobj[0] == null;
        }
        if(aobj[0] == null)
        {
            if(aobj[1] != null)
                return false;
            aobj[0] = ((Object) (new Object[2]));
            aobj[1] = ((Object) (new Object[2]));
        }
        return equals((Object[])(Object[])aobj[i & 1], s, i >> 1, j - 1);
    }

    private void length(Object aobj[], String s){
        ....  
        equals(aobj, s1, l1, j1);
        ....
    }

von j1 der grösste wert.. ist 20..

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.

_________________
Wer rechtschreibfehler findet darf sie behalten!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 07.04.05 15:30 
Tja, das Problem ist ja hier, dass, anders als in Java, in Delphi Strings keine Objekte sind.
Ich nehme mal an, das ist dir klar.

In dem Java-Quelltext kann man deshalb der Object-Variable einen String zuweisen, in Delphi geht das so nicht.

Vorschlag:
Nimm einfach eine Variant-Variable. Das macht den Code zwar nicht gerade schneller, dürfte aber die einfachste Übersetzung möglich machen, die relativ nah am Java-Code bleibt.
(Denn ich nehme mal an, dass noch mehr Code übersetzt werden soll, und da bringts nicht so viel, wenn ich das hier jetzt zu übersetzen versuche...)

Einer Variable vom Typ Variant kann man Strings genauso wie Integers zuweisen (so ähnlich wie bei Visual Basic, wo das Standard ist :puke: )
SchwiegerSohn Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Do 07.04.05 19:08 
Erstmal vielen dank :)
Ich werds für den weiter code mal probieren...

Ich habs erstmal so gelöst :

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
Type
  TCharAt = Class (TStringlist)
  private
  public
    Aobj : Array of TCharAt;
    constructor Create; overload;
    constructor Create(S:String); overload;
    constructor Create(Deep:Integer); overload;
  end;

Var
  Aobj : Array of TCharAt;

Constructor TCharAt.Create();
begin
  if Self = nil then
    exit;
end;

Constructor TCharAt.Create(s : String);
begin
  self.add(s);
end;

Constructor TCharAt.Create(Deep : Integer);
begin
  Setlength(self.Aobj,Deep);
end;

Function Equals(Var Aobj:Array of TCharAt; S:String; I:Integer; J:Integer):boolean;
begin
  if J = 0 then
  begin
    AObj[1] := TCharAt.Create(S);
    Result := AObj[0] = nil;
    exit;
  end;
  if AObj[0] = nil then
  begin
    if Aobj[1] <> nil then
    begin
      result := false;
      exit;
    end;
    AObj[0] := TCharAt.Create(2);
    AObj[1] := TCharAt.Create(2);
  end;
  Result := equals(AObj[i and 1].Aobj,s,i shr 1,j-1);
end;

Vielleicht nicht die eleganteste lösung.. aber sie funktioniert :)

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.

_________________
Wer rechtschreibfehler findet darf sie behalten!