Variablen Methode erkennt Variable nicht

  • Themenstarter Themenstarter Devilos
  • Beginndatum Beginndatum
D

Devilos

Gast
Hallo.

Habe ein Problem mit Java Netbeans 7.0.1!
Ich lerne jetzt nun seit ca. 1 - 2 Wochen Java. In der Schule wurde uns beigebracht dass Variablen die unter "public class NAME DES PROGRAMMS" sind, über alle Methoden übergreifen.

Las Aufgabe muss ich die Fläche und den Umfang eines Rechtecks ausrechnen. Die Länge und Breite sollen eingelesen werden. Und wir sollen das ganze noch in 3 Methoden unterteilen: eingabe(), berechnen() und ausgabe().

Aber irgendwie erkennt die Methode eingabe() die Variablen "laenge" und "breite" nicht obwohl ich sie in public class eingegeben habe.

Hier mein Coding:

Java:
public class Homerwork001_Rechteck {
    int laenge;
    int breite;
    int umfang;
    int flaeche;
    public static void main(String[] args) {
        System.out.println("Herzlich willkommen!");
    }
    public static void eingabe(){
        Scanner scan = new Scanner(System.in);
        System.out.println("Geben sie die Länge des Rechtecks ein");
        laenge = scan.nextInt();
        System.out.println("Geben sie die Breite des Rechtecks ein");
        breite = scan.nextInt();
        }
    public static void berechne(){
      
    }
}



Er unterstreicht "laenge/breite = scan.nextInt();" und gibt folgenden Fehler bekannt:

"non-static variable laenge cannot be referenced from a static context."


Mit dem Fehler kann ich leider nicht viel anfangen. Bitte um hilfe. Und bitte nichts kompliziertes, da ich Java Netbeans erst seit 1 1/2 Wochen mache.
 
"non-static variable laenge cannot be referenced from a static context."
Deine Methode enthält das Keyword static, und kann demnach nur auf Variablen zugreifen die auch als static deklariert sind:
Code:
static int breite;

Nicht-statische Variablen können direkt nur innerhalb von nicht-statischen Methoden verwendet werden. Wenn du in einer statischen Methode eine nicht-statische Variable ansprechen willst, dann benötigst du zunächst eine Instanz dieser Klasse. Nicht-statische Variablen nennt man auch "Instanz-Variablen", da sie immer an ein Objekt gebunden sind. Kein Objekt -> Keine Variable.
 
Befragt man Google nach der Fehlermeldung wird man förmlich von Ergebnissen erdrückt 😉

Das Problem ist einfach, dass du aus nem statischen Kontext (die Methode eingabe ist statisch) nicht auf Instanzvariablen zugreifen kannst. Stell dir vor du hast mehrere Instanzen der klasse, welche Variable soll Java dann nutzen?
 
Und hast du auch verstanden, was EikeB im letzten Satz gesagt hat? Wenn nein sollten wir das klären, da der Unterschied static <-> non-static extrem grundlegend und wichtig ist. Weißt du denn bereits, was ein Objekt ist?
 
Sry für Doppelpost.

Habe noch ein Problem.

Coding:

Java:
public class Homerwork001_Rechteck {
    static int laenge;
    static int breite;
    static int umfang;
    static int flaeche;
    public static void main(String[] args) {
    System.out.println("Herzlich willkommen!");
    }
    public static void eingabe(){
        Scanner scan = new Scanner(System.in);
        System.out.println("Geben sie die Länge des Rechtecks ein");
        laenge = scan.nextInt();
        System.out.println("Geben sie die Breite des Rechtecks ein");
        breite = scan.nextInt();
        }
    public static void berechne(){
      flaeche = laenge*breite;
      umfang = (laenge+breite)*2;
    }
    public static void ausgabe(){
        System.out.println("Fläche "+ flaeche);
        System.out.println("Umfang "+ umfang);
    }
}

Mein Programm endet sofort nach "Herzlich willkommen". Also das versteh ich schon mal überhaupt nicht.

Lg Devilos
 
weil in deiner main-Methode nur die Ausgabe steht, wenn du die entsprechenden Methoden auch aufrufst...funktioniert das wie gewünscht.

Java:
	public static void main(String[] args) {
		System.out.println("Herzlich willkommen!");
		eingabe();
		berechne();
		ausgabe();
	}

besser wäre allerdings weg von den statischen Variablen und Methoden zu kommen, also so etwas in der Art:

Java:
import java.util.Scanner;

public class Homerwork001_Rechteck {
	int laenge;
	int breite;
	int umfang;
	int flaeche;

	public static void main(String[] args) {
		new Homerwork001_Rechteck();

	}

	public Homerwork001_Rechteck() {
		eingabe();
		berechne();
		ausgabe();
	}

	public void eingabe() {
		Scanner scan = new Scanner(System.in);
		System.out.println("Geben sie die Länge des Rechtecks ein");
		laenge = scan.nextInt();
		System.out.println("Geben sie die Breite des Rechtecks ein");
		breite = scan.nextInt();
	}

	public void berechne() {
		flaeche = laenge * breite;
		umfang = (laenge + breite) * 2;
	}

	public void ausgabe() {
		System.out.println("Fläche " + flaeche);
		System.out.println("Umfang " + umfang);
	}
}
 

Zurück
Oben