Java Konstanten in Funktionen verwenden

zoz

Lt. Commander
Registriert
Mai 2010
Beiträge
1.727
Hallo, hab hier ein kleines Problem bei dem ich einfach nicht weiter komme: ich habe in meiner main Funktion einige Konstanten deklariert, z.B.:

Code:
 final char laueferWeiss = 'B';
 final char turmWeiss = 'R';
 final char dameWeiss = 'Q';

in einer anderen Funktion möchte ich dann einige Variablen mit den Konstanten abgleichen, z.B.

Code:
if(a == turmWeiss){
 // tu irgendwas
}


Da bekomme ich dann die Fehlermeldung "bauerWeiss cannot be resolved to a variable", also so wie ich das verstehe ist das Problem das die Funktion die Variable nicht kennt.

Was kann ich da machen? Danke schonmal.
 
Hi,

in einer anderen Funktion der gleichen Klasse oder in einer anderen Klasse? Mal getestet, was passiert, wenn du die Variablen-Sichtbarkeit auf "public" setzt? Komme leider aus der C#-Ecke, daher alles mit Vorsicht zu genießen was ich zu Java schreibe ;)

VG,
Mad

Edit: Teste mal, ob es mit "normalen" Variablen, also nicht mit Konstanten, genauso ist.
 
Wenn du in der main Methode etwas deklarierst, dann kann es in anderen Methoden natürlich nicht verfügbar sein. Das ist dann "out of scope".

Entweder du erstellst die Konstanten als Klassenattribute oder du übergibst sie bei Methodenaufruf als Parameter.
 
Das war auch meine Idee, hab:

Code:
	 public final char bauerWeiss = 'P';

gemacht, aber da meldet er "Illegal modifier". Bin auch aus der PHP Ecke und deshalb bisschen ratlos wie das in Java funktioniert ;)

Wie mache ich die Konstanten als Klassenattribute? Ale Konstanten an die Funtkion zu übergeben ist zuviel Tipparbeit bei 16 Konstanten ;)
 
deklarier die konstanten einfach außerhalb der methode als klassenattribute, so kannst du von überall in der klasse drauf zugreifen

Code:
public class MyClass {

  private static final char laueferWeiss = 'B';
  private static final char turmWeiss = 'R';
  private static final char dameWeiss = 'Q';

  public static void main(String args[]) {
   ...
  }
}

willst du auf die Konstaten noch aus einer andren klasse zugrifen, dann mach aus dem private n public

vg
 
Zuletzt bearbeitet:
Du darfst die Konstanten nicht in einer Methode definieren, wenn du sie außerhalb der Methode verwenden willst. Du musst sie global deklarieren, also außerhalb einer Methode (aber noch innerhalb der Klasse). Und es bietet sich an, sie als Klassenkonstanten zu deklarieren, damit sie nur ein mal Speicherplatz verwenden, anstatt für jedes Objekt neu deklariert werden zu müssen (falls die Klasse instantiiert wird).

zB
Code:
public class Xyz {

	public static final float PI = 3.141592f;

	public static void main(String[] args) {

		System.out.println("PI = " + PI);
		System.out.println("PI = " + Xyz.PI);
	}
}

Edit:
Btw, es ist eine gängige Konvention, in Java alle Konstanten komplett groß zu schreiben. Dann sieht man auch ohne extra nachzuschauen, was eine Konstante ist und was nicht. (zB KONSTANTE statt Konstante oder konstante)
 
Zuletzt bearbeitet:
Code:
if(a == turmWeiss){
 // tu irgendwas
}
Das ist sowie so nicht optimal
Code:
if(a.equals(turmWeiss)){
 // tu irgendwas
}
Was du machen willst, sind static variablen, diese werden über die Klasse abgecheckt:

Code:
class meineKlasse
...
public static typx meineVariable = 'x'...
...

, dann in einer anderen Klasse

Code:
class meineAndereKlasse
...
if (meineKlasse.meineVariable.equals(...)){...}
// oder ggF bei primitiven Typen: if (meineKlasse.meineVariable == whatever) do...;
...
...
Glaube ich zumindest :D

Edit: Habs getestet, jo, so ist es. Eine Sache noch zu dem equals: das nehme ich zurück, kann man so pauschal nicht sagen, wenn möglich, sollte man es aber verwenden!
 
Zuletzt bearbeitet:
Danke e-Laurin, hat geklappt ;)
 
@F_GXdx: Konstanten IMMER final deklarieren, sonst sinds keine Konstanten sondern statische Variablen...
 
F_GXdx schrieb:
Code:
if(a == turmWeiss){
 // tu irgendwas
}
Das ist sowie so nicht optimal
Code:
if(a.equals(turmWeiss)){
 // tu irgendwas
}

Edit: Habs getestet, jo, so ist es. Eine Sache noch zu dem equals: das nehme ich zurück, kann man so pauschal nicht sagen, wenn möglich, sollte man es aber verwenden!
equals ist nur bei Objekten und Strings nötig, denn == prüft dort ob beide die selbe Instanz sind.
Dein Code dürfte glaube ich gar nicht gehen, da char kein Objekt ist.


AlrikvomFluss schrieb:
@F_GXdx: Konstanten IMMER final deklarieren, sonst sinds keine Konstanten sondern statische Variablen...
noch optimaler wäre hier ein enum, da man somit automatisch auch eingegrenzt welchen Wert eine Variable einnehmen kann, einen char könnte man auch mit Werten füttern, die keine Bedeutung durch Konstanten haben.
 
Zurück
Oben