# Cannot be resolved to a variable



## TurboKarl (20. Apr 2011)

Hey,

bin ganz neu in der "Programmierwelt" und bin gerade dabei mir die Basics in Sachen Java anzueignen.
Leider hab ich auch schon den ersten Fehler, und komme einfach nicht dahinter, was ich falsch mache.

Hier erstmal der Code:


```
public class Temperaturumrechung {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	   	final int ADD_FAKTOR = 32;	
		final int MULT_FAKTOR = 5;
		final int DIV_FAKTOR = 9;
		System.out.println ("Was möchten Sie umrechnen?");
		System.out.println ("c: Celsius in Fahrenheit");
		System.out.println ("f: Fahrenheit in Celsius");
		char choice = Input.readChar();
		if (choice == 'c'){
			System.out.println ("Geben Sie bitte die Temperatur in °C an");
			double tCelsius = Input.readInt();
			ergebnis = tCelsius * MULT_FAKTOR / DIV_FAKTOR + ADD_FAKTOR;
			System.out.print(tCelsius + "°C sind °F: " );
		} else {
			System.out.println ("Geben Sie bitte die Temperatur in °F an");
			double tFahrenheit = Input.readInt();
			ergebnis = (tFahrenheit - ADD_FAKTOR) * DIV_FAKTOR / MULT_FAKTOR;
			System.out.print(tFahrenheit + "°F sind in °C: " );
			
		}
	System.out.println (ergebnis);
	}

}
```

Der Fehler der kommt betrifft die Zeilen 18 und 23 und lautet: "ergebnis cannot be resolved to a variable", was bedeutet dieser Fehler und wie kann ich ihn verhindern?

Gruß und schoneinmal Danke


----------



## maki (20. Apr 2011)

Du hast [c]ergebnis[/c] nicht deklariert.


----------



## TurboKarl (20. Apr 2011)

Hey,

super,danke! 

ich habe also nun "double ergebnis" in den Kopf geschrieben und es klappt.

edit: Kleine Nebenfrage, ist eine Deklaration über meinen ganzen Text hinweg gültig?

Gruß


----------



## Andi_CH (20. Apr 2011)

Eine Deklaration ist in einem Block gültig und der reicht im Noramlfall von der { oderhalb bis zur } unterhalb.

Ich hab mal etwas in deinen Code geschrieben.


```
public static void main(String[] args) {
        final int ADD_FAKTOR = 32;  
        final int MULT_FAKTOR = 5;
        final int DIV_FAKTOR = 9;
        System.out.println ("Was möchten Sie umrechnen?");
        System.out.println ("c: Celsius in Fahrenheit");
        System.out.println ("f: Fahrenheit in Celsius");
        char choice = Input.readChar();
        if (choice == 'c'){
            System.out.println ("Geben Sie bitte die Temperatur in °C an");
            double tCelsius = Input.readInt();
            ergebnis = tCelsius * MULT_FAKTOR / DIV_FAKTOR + ADD_FAKTOR;
            System.out.print(tCelsius + "°C sind °F: " );
// tCelsius ist bekannt
// Hier sind choice und die Konstanten bekannt
        }
// ab hier existiert tCelsius nicht mehr
        else {
// hier gibt es auch choice und die Konstanten, aber tCelsius ist unbekannt
            System.out.println ("Geben Sie bitte die Temperatur in °F an");
            double tFahrenheit = Input.readInt();
            ergebnis = (tFahrenheit - ADD_FAKTOR) * DIV_FAKTOR / MULT_FAKTOR;
            System.out.print(tFahrenheit + "°F sind in °C: " );
        }
// hier gibt es weder tCelsius nocht tFahrenheit
    System.out.println (ergebnis);
    }
```


----------



## Volvagia (20. Apr 2011)

Kommt drauf an, wo du sie deklarierst.
Wenn es in der Main ist, ist sie in der Main gültig. Wenn du in der if deklarierst, ist sie in der if gültig. So ist das mit jeden Block (while, do, for, try) ausgenommen synchronized, da es dafür keine Bedingung gibt, die ihm nur unter bestimmten Umständen abarbeiten lassen.
Wenn du sie ober der Main in der Klasse deklarierst, ist sie solange gültig, bis die Instanz nicht mehr gebraucht wird. Wenn du sie in der Main in der Klasse mit static deklarierst, ist sie das ganze Programm über gültig. (Da bin ich mir nicht 100 % sicher, wäre aber logisch.)

btw. geht ihr zufällig in die selbe Klasse? http://www.java-forum.org/java-basics-anfaenger-themen/116719-mehrere-einlesevorgaenge-moeglich.html


----------



## Guardi (20. Apr 2011)

Deine Variable ist dann im Namensraum deiner Klasse gültig, also z.b. in allen lokalen Methoden der Klasse.
Eine Variable die du in einer Methode deklarierst ist nur im Namensraum der Methode sichtbar usw.

Desweiteren ist eine Klassen-Variable, Methode etc. ausserhalb seines Namensraums bekannt wenn du sie public oder protected deklarierst (paketsichtbarkeit). Und ausschliesslich innerhalb der deklarierenden Klasse wenn private.


----------



## Andi_CH (20. Apr 2011)

Hast du dir auch schon überlegt, dass jemand der nicht weiss wie weit ein Name gültig ist, auch nicht weiss was ein Namensraum ist ???:L - ts ts ts - mein Beispiel oben zeigt doch wenigstens etwas konkretes.


----------



## fastjack (20. Apr 2011)

Yep, er fragt ja auch nur nach dem Fehler mit ergebnis, das muß halt "oben" in der main()-Methode definiert werden. Stufe 2 sollte, das Du Dich mit Packages und Sichtbarkeiten auseinandersetzt.


----------



## TurboKarl (20. Apr 2011)

Volvagia hat gesagt.:


> btw. geht ihr zufällig in die selbe Klasse? http://www.java-forum.org/java-basics-anfaenger-themen/116719-mehrere-einlesevorgaenge-moeglich.html



Nein, ist mir nicht bekannt. Arbeite nur ein paar Vorlesungen nach, aber das Programm ähnelt sich doch sehr. Nehme mal an,dass dies so Standardsachen sind.

Danke auf jeden Fall für die rege Hilfe.


----------

