in Delphi:
var n : Integer; |
in Java:
int n; |
in Delphi:
n := 137682; |
in Java:
n = 137682; |
D2h 19h 02h 00hhintereinander an der für n reservierten Stelle des Speichers.
In Delphi benötigen die Datentypen "Byte" und "AnsiChar" beide jeweils 1 Byte. Es ist aber durchaus ein Unterschied, ob der Speicherinhalt "4Dh" die (Byte-)Zahl "77" oder den Buchstaben "M" bedeuten soll! |
In Java benötigen die Datentypen "int" und "float" jeweils 4 Byte. Interpretiert man die hexadezimale Byte-Folge |
Variablen-Art | Typ-Name Delphi / Java |
Werte-Bereich | Belegter Speicher |
---|---|---|---|
Ganze Zahlen | Byte / byte | 0 .. 255 | 1 Byte |
Integer / int | –2 147 483 648 .. 2 147 483 647 | 4 Byte | |
Fließkomma-Zahlen | Single / float | 1.5 x 10^–45 .. 3.4 x 10^38, 7-8 Dez.-Stellen genau |
4 Byte |
Double / double | 5.0 x 10^–324 .. 1.7 x 10^308, 15-16 Dez.-Stellen genau |
8 Byte |
In Delphi gibt für die Kodierung von Buchstaben den 1 Byte großen Typ "AnsiChar". Da 1 Byte 256 verschiedene Werte annehmen kann, ist die Anzahl der damit kodierbaren Zeichen also auf 256 begrenzt. Eine Zeichenkette aus solchen AnsiChar-Buchstaben bildet dann einen "ShortString"; dieser kann maximal 255 Zeichen enthalten, was somit die maximale Länge einer Zeile ist.
|
In Java gibt für die Kodierung von Buchstaben den 2 Byte großen Typ "char". Da 2 Byte 65536 verschiedene Werte annehmen kann, ist die Anzahl der damit kodierbaren Zeichen also auf 65536 begrenzt. Eine Zeichenkette aus solchen AnsiChar-Buchstaben bildet dann einen "String"; dieser kann maximal 2 147 483 647 Zeichen enthalten, was somit die maximale Länge einer Zeile ist.
|
In Delphi: Links sehen Sie, wie wir dies bisher programmiert haben. Die Variante rechts verwendet eine zusätzliche boolsche Variable namens "not_ready", welche das Auftreten des Wahrheitswertes verdeutlicht:
|
In Java: Links sehen Sie, wie wir dies bisher programmiert haben. Die Variante rechts verwendet eine zusätzliche boolsche Variable namens "not_ready", welche das Auftreten des Wahrheitswertes verdeutlicht:
|
In Delphi:
If CheckBox1.Checked then ...... else ......;Anfänger neigen bei der Formulierung der Bedingung häufig dazu, statt der boolschen Variablen "CheckBox1.Checked" ganz ausführlich den boolschen Ausdruck "CheckBox1.Checked = True" zu schreiben. Dies liefert zwar stets ebenfalls das richtige Ergebnis und ist daher nicht falsch. Eleganter ist jedoch die Kurzform; machen Sie sich daher klar, dass diese tatsächlich schon das jeweilige Ergebnis enthält! |
In Java:
if (checkBox1.State) { ......... } else { ......... };Anfänger neigen bei der Formulierung der Bedingung häufig dazu, statt der boolschen Variablen "CheckBox1.State" ganz ausführlich den boolschen Ausdruck "CheckBox1.State == true" zu schreiben. Dies liefert zwar ebenfalls stets den korrekten Wahrheitswert und ist daher nicht falsch. Eleganter ist jedoch die Kurzform; machen Sie sich daher klar, dass diese tatsächlich schon das jeweils korrekte Ergebnis enthält! |
In Delphi werden NOT, AND und OR mit genau diesen Wörtern als Bezeichner bereitgehalten. Damit lassen sich auch kompliziertere zusammengesetzte Bedingungen formulieren, wie z.B.:
If Checkbox1.Checked AND NOT Checkbox2.Checked then ........; oder: If Checkbox1.Checked OR ((s >= 3) AND (s <= 7)) then .........;Die äußere Klammer um die beiden Teilbedingungen im letzten Beipiel ist eigentlich überflüssig, da AND ja ohnehin stärker bindet als OR. Häufig setzt man sie trotzdem, damit die Bedingung leichter lesbar wird. Beachten Sie aber, dass in Delphi die logischen Operatoren (also NOT, AND und OR) stärker binden als die Vergleichsoperatoren (<, > usw.). Die inneren Klammern um die Vergleiche sind also nötig! |
In Java werden die logischen Operatoren NOT, AND und OR durch jeweils eigene Symbole ausgedrückt: NOT wird durch ein "!" dargestellt, AND durch das "&&" und ODER durch "||" (natürlich in Termen jeweils ohne die Anführungszeichen). Damit lassen sich auch kompliziertere zusammengesetzte Bedingungen formulieren, wie z.B.:
if (Checkbox1.State && !Checkbox2.State) { ....... } oder: if ( Checkbox1.Checked || ((s >= 3) && (s <= 7)) ) { ....... }Die mittlere und die inneren Klammern um die beiden Teilbedingungen im letzten Beipiel sind eigentlich überflüssig, da in Java > und < stärker binden als AND, und AND wiederum stärker bindet als OR. Häufig setzt man diese Klamern aber trotzdem, damit die Bedingung leichter lesbar wird. |
In Delphi können wir die ASCII-Nummer eines Zeichens durch eine Typ-Umwandlung erhalten: sind u und v CHAR-Variablen und a, n, m und b vom Typ INTEGER, dann wird mit
a := Byte(u); { Typ-Umwandlung Zeichen -> Zahl }die ASCII-Nummer des in u gespeicherten Zeichens in der Variablen a abgelegt. Wenn z.B. u das Zeichen "K" enthält, dann liefert Byte(u) den Wert 75, was die ASCII-Nummer von "K" ist. Wir wollen allerdings (aus später nachvollziehbaren Gründen) für unsere Numerierung bei "A" mit der "0" beginnen. "B" erhält dann die "1", "C" die "2" usw usf. Dies läßt sich erreichen, ohne dass wir die ASCII-Nummer von "A" nachschlagen: n := a - Byte('A') { Verschiebung ASCII-Nr von 'A' -> 0 }liefert genau die gewünschte Zuordnung. Die verschlüsselnde Verschiebung um s Zeichen wird nun durch eine schlichte Addition erreicht. Damit wir dabei aber nicht über das Ende des Alphabets hinausrutschen, muss das Ergebnis noch MOD 26 genommen werden: m := (n + s) MOD 26 { Verschiebung um s Zeichen }Um nun das zu u passende verschlüsselte Zeichen v zu erhalten, muss dieser Wert für g dann wieder in ein Zeichen umgewandelt werden: b := m + Byte('A'); { Verschiebung 0 -> ASCII-Nr von 'A' } v := Char(b); { Typ-Umwandlung Zahl -> Zeichen } |
In Java können wir die ASCII-Nummer eines Zeichens durch eine Typ-Umwandlung erhalten: sind u und v CHAR-Variablen und a, n, m und b vom Typ INTEGER, dann wird mit
a = (int) u; // Typ-Umwandlung Zeichen -> Zahldie ASCII-Nummer des in u gespeicherten Zeichens in der Variablen a abgelegt. Wenn z.B. u das Zeichen "K" enthält, dann liefert Byte(u) den Wert 75, was die ASCII-Nummer von "K" ist. Wir wollen allerdings (aus später nachvollziehbaren Gründen) für unsere Numerierung bei "A" mit der "0" beginnen. "B" erhält dann die "1", "C" die "2" usw usf. Dies läßt sich erreichen, ohne dass wir die ASCII-Nummer von "A" nachschlagen: n = a - (int) 'A'; // Verschiebung ASCII-Nr von 'A' -> 0liefert genau die gewünschte Zuordnung. Die verschlüsselnde Verschiebung um s Zeichen wird nun durch eine schlichte Addition erreicht. Damit wir dabei aber nicht über das Ende des Alphabets hinausrutschen, muss das Ergebnis noch modulo 26 genommen werden: m = (n + s) % 26; // Verschiebung um s ZeichenUm nun das zu u passende verschlüsselte Zeichen v zu erhalten, muss dieser Wert für g dann wieder in ein Zeichen umgewandelt werden: b = m + (int) 'A'; // Verschiebung 0 -> ASCII-Nr von 'A' v = (char) b; // Typ-Umwandlung Zahl -> Zeichen |