Die Probleme, die Sie lernen müssen, sind:
{...}
block für if
-Anweisungen if-else
anstelle von if (something) {...} if (!something) {...}
verwendet werden?
Übrigens ist der idiomatische Weg, den Unterschied zweier Werte zu finden,
%Vor% Beachten Sie, dass Math.abs
einen Eckfall hat: Wenn das Argument Integer.MIN_VALUE
ist, ist der zurückgegebene Wert Integer.MIN_VALUE
. Das liegt daran, dass -Integer.MIN_VALUE == Integer.MIN_VALUE
. Das Problem hier ist 32-Bit-Zweierkomplement-Darstellung von Zahlen.
Math.abs(int)
if
Hier ist ein Versuch, das Snippet zu reparieren, indem die Variable vor if
Wir haben jetzt ein Problem mit der definitiven Zuweisung: Wenn first_var == second_var
, ist der Variable difference
immer noch kein Wert zugewiesen.
Hier ist ein zweiter Versuch:
%Vor% Anfänger tendieren dazu, dies zu tun, aber dies schließt die Möglichkeit aus, difference
a final
lokale Variable zu machen, weil ihr Wert möglicherweise zweimal vergeben wurde.
if-else
Hier ist ein besserer Versuch:
%Vor%Es gibt noch Möglichkeiten, dies zu verbessern.
Sobald Sie mit der Sprache und Programmierung vertraut sind, können Sie das folgende Idiom verwenden:
%Vor% Dies verwendet den ternären / bedingten Operator ?:
. Sei vorsichtig mit diesem Operator. Es hat einige Verhaltensweisen, die überraschend sein können, und es kann definitiv missbraucht werden. Verwenden Sie sorgfältig, umsichtig, idiomatisch.
Sie haben zwei Möglichkeiten:
Machen Sie die Bedingung in einer Zeile mit dem ternären Operator?:
%Vor%Deklarieren Sie die Variable im Vordergrund, und führen Sie dann die Bedingung aus.
%Vor% Es liegt daran, dass die Variable möglicherweise nicht initialisiert wird. In der Realität, wenn first_var
und second_var
gleich sind, wird es nicht initialisiert. Außerdem ist der Compiler wahrscheinlich nicht schlau genug, um es herauszufinden, selbst wenn Sie ein drittes if
hinzugefügt haben. Verschieben Sie die Deklaration außerhalb von if
s und initialisieren Sie sie auch auf einen Wert in dieser Zeile.
Ich würde es aber nur tun
%Vor%Zuerst müssen Sie die Tourvariable "difference" außerhalb Ihrer ifs-Anweisungen definieren:
%Vor%Dann kann der Compiler nicht sicher sein, dass Ihre Variable einen Wert haben wird, sobald beide ifs-Anweisungen ausgeführt werden. Wenn zum Beispiel first_var und second_var denselben Wert haben, wird die Differenz nicht zugewiesen. Also, wenn Sie versuchen, Ihre Variable zu verwenden, haben Sie einen Fehler bei der Kompilierung.
Um dies zu beheben, haben Sie zwei Lösungen:
Die erste Lösung besteht darin, Ihrer Variablen einen Standardwert zu geben, der verwendet wird, wenn keine anderen Bedingungen erfüllt sind:
%Vor%Die andere Lösung besteht darin, else if-Anweisungen zu verwenden. Wenn Sie sonst if-Anweisungen verwenden, kann der Compiler bestimmen, ob Ihre Variable in allen Fällen zugewiesen wird:
%Vor%Sie können zwar eine Variable innerhalb einer if-Anweisung zuweisen, aber Sie können sie nicht innerhalb einer if-Anweisung initialisieren. In einfachem Englisch können Sie einer Variablen einen Wert innerhalb einer if-Anweisung geben, aber Sie können keine Variable innerhalb einer if-Anweisung erstellen. Der Grund dafür ist, dass es möglich ist, dass der Code in der if-Anweisung nie ausgeführt wird, wenn die if-Bedingungen nie erfüllt sind.
So hätte ich diesen Code geschrieben:
%Vor%Tags und Links java