Variablenwerte aus einer Methode übergeben

L3giones

Neues Mitglied
Hallo zusammen,

ich fange grade erst mit Java an und konnte im Forum keine Lösung für mein Problem finden (vermutlich weil ich gar nicht weiß, wonach ich eigentlich suchen muss). Ich wollte versuchen eine Methode zu erstellen, welche meine 3 Variablen durch einen Nutzerinput mit Informationen füllt und diese dann wieder an die Main Methode übergibt und ausgibt.

Java:
[/B]
import java.util.Scanner;


public class ObjekteundKlassen {
public static void main(String[] args){
        int age = 0;
        String name = ("");
        String gender = ("");

        Mitarbeiter(age,name,gender);
        System.out.print("age: " + age + " name: " +  name + " gender: " + gender);
    }

public static void Mitarbeiter(int age, String name, String gender){
Scanner scan = new Scanner(System.in);
        System.out.println("Bitte Alter eingeben:");
        age += scan.nextInt();
        System.out.println("Bitte Name eingeben");
        name += scan.next();
        System.out.println("Bitte Geschlecht angeben");
        gender += scan.next();
    }
}
[B]

Leider ist der Output immer: age: 0 name: gender:

Wenn ich das ganze ohne die Methode versuche, funktioniert es. Ich habe also vermutet, dass meine Werte aus den Variablen, nicht an meine Variablen in der Main Methode übergeben werden.

Kann mir jemand weiterhelfen?

Lieben Gruß
 
Bei Parametern wird immer nur der Wert kopiert (Call by Value). Du kannst also übergebene Variablen nicht ändern.

Die Lösung ist hier, dass Du so Variablen nicht als lokale Variablen hast sondern als Instanz- oder Klassenvariablen. Da Du bisher nur static Methoden hast, kannst Du nur Klassenvariablen nutzen. Das sähe dann so aus:
Java:
import java.util.Scanner;


public class ObjekteundKlassen {

    static int age = 0;
    static String name = "";
    static String gender = "";

    public static void main(String[] args){
        eingabeMitarbeiter();
        System.out.print("age: " + age + " name: " +  name + " gender: " + gender);
    }

    public static void eingabeMitarbeiter() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Bitte Alter eingeben:");
        age = scan.nextInt();
        System.out.println("Bitte Name eingeben");
        name = scan.next();
        System.out.println("Bitte Geschlecht angeben");
        gender = scan.next();
    }
}

Du erkennst folgende Änderungen:
  • Die Variablen werden nun nicht mehr in der Methode deklariert sondern in der Klasse und sie sind static.
  • Die Methode hat keine Parameter mehr (Methoden sollten ein Verb beinhalten und besagen, was sie machen. Und sie fangen mit einem kleinen Buchstaben an.)
  • Ich habe aus den += ein = gemacht. Du willst ja die Eingabe haben und die Eingabe nicht nur anhängen. Bei einmaligem Aufruf ist das natürlich so egal, aber man könnte es ja mehrfach aufrufen.


Das ist aber nur eine Möglichkeit. Besser wäre es natürlich, wenn man eine Klasse Mitarbeiter hätte mit name, age, gender und dann hat man eine Methode, die eine neue Instanz von Mitarbeiter (Employee - Wenn man es Englisch macht dann auch die Klasse 🙂 ) zurück zu geben. Da ich mit aber nicht sicher bin, wie Weit Du bist, habe ich das jetzt noch nicht Vorweg genommen. (Aber da die Klasse ObjbekteundKlassen heisst, wird das vermutlich auch bald kommen 🙂 )
 

Neue Themen


Zurück
Oben