Wie können Sie einer Variablen einen Wert innerhalb einer if-Anweisung in Java zuweisen?

8

Ich muss so etwas machen,

%Vor%

Wenn ich versuche, das zu kompilieren, kommt ein Fehler, der besagt, dass die Variable 'difference' möglicherweise nicht initialisiert wurde. Die Variable "Differenz" global zu machen, hilft auch nicht.

    
Dananjaya 29.08.2010, 10:53
quelle

7 Antworten

25

Die Probleme, die Sie lernen müssen, sind:

  • Der Umfang der Variablen
  • Blockdeklaration und wie diese neue Bereiche erstellt
  • Warum sollten Sie {...} block für if -Anweisungen
  • verwenden?
  • Wie garantiert man eine eindeutige Zuordnung?
  • Wann sollte 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.

Referenzen

Versuch # 1: Deklaration vor dem if

Hier ist ein Versuch, das Snippet zu reparieren, indem die Variable vor if

deklariert wird %Vor%

Wir haben jetzt ein Problem mit der definitiven Zuweisung: Wenn first_var == second_var , ist der Variable difference immer noch kein Wert zugewiesen.

Versuch # 2: Initialisierung bei Deklaration

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.

Versuch # 3: if-else

Hier ist ein besserer Versuch:

%Vor%

Es gibt noch Möglichkeiten, dies zu verbessern.

Versuch # 4: Der ternäre / bedingte Operator

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.

Referenzen

polygenelubricants 29.08.2010, 10:55
quelle
3

Sie haben zwei Möglichkeiten:

  1. Machen Sie die Bedingung in einer Zeile mit dem ternären Operator?:

    %Vor%
  2. Deklarieren Sie die Variable im Vordergrund, und führen Sie dann die Bedingung aus.

    %Vor%
Peter Alexander 29.08.2010 10:56
quelle
3

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.

%Vor%

Ich würde es aber nur tun

%Vor%     
Matti Virkkunen 29.08.2010 10:58
quelle
3

Sie können eine Variable nur an einer Stelle deklarieren.

Die grundlegende Lösung ist

%Vor%

In diesem Fall können Sie jedoch inline?: operator

verwenden %Vor%     
Mark 29.08.2010 10:56
quelle
1

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%     
Vivien Barousse 29.08.2010 10:59
quelle
0

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%     
lala 29.08.2010 14:48
quelle
0

Der Grund, warum es möglicherweise nicht initialisiert wurde, ist, dass Sie A & lt; B, B & lt; A, aber nicht A == B. Konto dafür:

%Vor%     
CJ Goggin 29.03.2018 16:06
quelle

Tags und Links