Java: Initialisierung von Variablen: gleich allen Variablen auf einmal den gleichen Wert zuweisen?

5 Antworten

Ich möchte 26 Variablen initialisieren

Warum möchtest du das tun?

ich hab keine Lust jedem Buchstaben nochmal extra die 0 zuzuweisen

Warum nutzt du dann aber 26 einzelne Variablen. Ich bin mir ziemlich sicher, dass du eigentlich ein Array benötigst:

public class MyClass {
public static void main(String args[]) {
int[] numbers = new int[26];
for (int i : numbers) {
System.out.println(i); // gibt 26x 0 aus
}
}
}

Du brauchst sie nicht auf 0 setzen, weil es der Standard-Wert ist.

Ich würde es folgendermaßen machen:

int a, b, c;
a = b = c = 0;
Woher ich das weiß:Berufserfahrung – Langjährige Berufserfahrung als IT-Berater

Es gibt diese 3 Alternativen:

a) 

int a, b; // usw.
a = b = 0;

b)

int a = 0, b = 0, c = 0;

c)

int[] zahlen = new int[26];

for(int i = 0; i < zahlen.length; ++i) zahlen[i] = 0;

Variante c) wäre vorzuziehen, denn sie ist übersichtlicher. Statt einem Array kannst du auch andere Speicheraggregate wie z.B. eine Liste verwenden.

Speicher das Zeug nicht in 26 Einzelvariablen, sondern in 'nem Array, ner Liste, ner Map oder was grad passt - dann kannst du drüberiterieren. 


llijnnasil 
Beitragsersteller
 30.09.2017, 19:02

Das hab ich schon versucht mit dem Array und dann in einer Schleife allen Buchstaben den Wert 0 zuzuweisen, aber dann kommen tausend Fehlermeldungen: "The local variable a,b,c,d, usw. may not have been initialized".

int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;

int[] counter = {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z};
for (int i1 = 0; i1 < counter.length; i1 ++){
counter[i1] = 0;
}
mrboese  30.09.2017, 19:08
@llijnnasil

Der Code ist auch falsch. Lies dich nochmal ein wie genau man Listen & Arrays benutzt.

Außerdem wenn du willst dass die Werte 0 sind, dann brauchst du nichts zu machen. Primitive wie int sind standardmäßig 0 (oder false im Falle von boolean)

llijnnasil 
Beitragsersteller
 30.09.2017, 19:12
@mrboese

was ist denn daran konkret falsch?
Bei Java ist dem aber nicht so. Wenn man eine Variable initialisiert und ihr keinen Wert zuweist, wird der Variable nicht automatisch die 0 zugewiesen...da ist dann halt einfach eine 'null-Referenz'.

regex9  30.09.2017, 19:23
@llijnnasil

Die Lösung, was an deinem Code falsch ist, hast du dir bereits selbst gegeben, auch wenn der Standardwert dennoch keine Referenz auf null ist.

Deine ersten beiden Zeilen sind prinzipiell nicht durchdacht. Die Lösung mit dem Array sorgt doch dafür, dass du nicht mehr 26 einzelne Variablen anlegen musst, diese Speichereinheiten stellt das Array bereits selbst zur Verfügung. So wirst du die Werte später auch nicht mehr über a oder b aufrufen, sondern über den Array-Index. Bsp.:

int ersteZahl = zahlen[0];
zalto  30.09.2017, 19:28
@llijnnasil

Primitive Datentypen haben in Java den Vorgabewert von 0 für alle ganzzahligen Typen. Sie enthalten keinen Null-Pointer, d.h. wenn Du die Vorbelegung mit 0 behalten willst, brauchst Du nichts zuzuweisen - es würde höchstens der Klarheit dienen.

verreisterNutzer  30.09.2017, 19:52
@mrboese

Falsch ist der Code nicht, aber es werden nur die array-element initialisiert, die ober Zeile int a, b, ... usw eben nicht-

Du hast also nichts gewonnen.

Am anschaulichsten ist int a = 0, b = 0, c = 0, usw.

Programmieren heist auch etwas Schreibarbeit.

mrboese  30.09.2017, 20:29
@llijnnasil

Das es da Fehler gibt ist ein Feature der Sprache. Ist ansonsten eine Fehlerquelle (weil nicht gut lesbar).

Eine "null-Referenz" ist das nicht, wie auch andere schreiben. Das sind Primitive. Die sind nie null. Referenzen können null sein, weil das Zahlen sind, die auf den Speicherbereich der eigentlichen Daten zeigen. Speicheradresse 0 (schön abgekapselt mit null) ist definiert als "zeigt auf nix". Das trifft aber nur auf Objekte zu. Wenn du auf ein Primitiv zugreifst, dann arbeitest du direkt auf den Bits. Bei Referenzen folgt der bei Operationen der Speicheradresse.

Wenn du in Java ein Array anlegst, dann reserviert der sich Speicher für x Elemente und setzt alle bits in dem Bereich auf 0.

regex9  01.10.2017, 22:21
@verreisterNutzer

Natürlich ist der Code falsch! Nicht umsonst bekommt er einen Compilerfehler.

Werden ints in Java nicht sowieso default-mäßig mit 0 initialisiert?