Entwickler-Ecke
Sonstiges (Delphi) - Hilfe bei Java übersetzung !
SchwiegerSohn - Di 05.04.05 11:21
Titel: Hilfe bei Java übersetzung !
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 :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Type Myvar = Record A:String; B:Array[0..1] of 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
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
AXMD: Code- durch Delphi-Tags ersetzt.
jaenicke - 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 - Do 07.04.05 19:08
Erstmal vielen dank :)
Ich werds für den weiter code mal probieren...
Ich habs erstmal so gelöst :
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
raziel: Code- durch Delphi-Tags ersetzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!