Cannot be resolved to a variable

TurboKarl

Mitglied
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:

Java:
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
 
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ß
 
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.

Java:
    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);
    }
 
Zuletzt bearbeitet:
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
 
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.
 
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.
 
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.
 

Zurück
Oben