Instanzvariablen implementieren - grundlegende Probleme

Status
Nicht offen für weitere Antworten.

Qlike

Neues Mitglied
Hallo zusammen

ich versuche mich erst seit kurzem mit Java und habe daher wohl auch bei eher grundlegenden Problemstellungen teilweise noch meine Mühe 🙂

da ich aus der Compiler Fehlermeldung nicht ableiten kann, was ich genau falsch mache, wende ich mich an euch. Ich bitte euch, mir nicht einfach nur die Lösung zu schreiben sondern vielleicht eher zu zeigen, wo ich nochmals genau nachschauen soll bzw. ob ich eine Technik evtl. falsch anwende bzw. etwas total falsch gemacht habe.

ich habe folgenden Code, welcher ohne Fehler kompiliert wird:

Employee.java

Java:
import java.util.Scanner;

public class Employee {

	public void setFirstName (String FirstName) {
	
	String fFirstName;
	String fLastName;
	String fSalary;
	Scanner keyboard = new Scanner(System.in);
	
	System.out.println("Enter first name:");
	
	FirstName = keyboard.nextLine();
	
	fFirstName = FirstName;
	
	System.out.println("First name is" + fFirstName);
	}

}

ich will zuerst mal nur den FirstName setzen (setter-Methode), Nachnamen und Gehalt müsste ja dann auf die gleiche Weise funktionieren, sobald der Code fehlerlos ist 🙂

den oben genannten Code möchte ich über einen TestDriver "EmployeeTester.java" aufrufen, so dass eine Instanz der Klasse Employee erzeugt wird.

Der Testdriver sieht so aus:

Java:
public class EmployeeTester {
	
	
	public static void main(String[] args) {

		Employee myEmployeeObject = new Employee();
		myEmployeeObject.setFirstName(String FirstName);
	}
}

jetzt beschwert sich aber der Compiler bei EmployeeTester.java wie folgt:

Code:
C:\Java>javac EmployeeTester.java
EmployeeTester.java:9: ')' expected
                myEmployeeObject.setFirstName(String FirstName);
                                                    ^
EmployeeTester.java:9: illegal start of expression
                myEmployeeObject.setFirstName(String FirstName);
                                                              ^

ich versteh leider gleich beide Male nicht so ganz, was anderst gemacht werden müsste.

Danke für eure Hilfe!
 
Beim Aufruf wird nur ein String übergeben...
employee.setFirstName("DasWasAlsNameGesetztWerdenSoll");

Allerdings macht die Methode ja nicht, was der Name und die Signatur suggerieren. Die Methode müßte eher heißen
public void letTheUserInputTheFirstNameAndStoreIt() { ... }

Ggf. sollte die Eingabe (mit System.in) in der Main gemacht werden, und die eigentliche Methode dann nur den String, der übergeben wird, als Namen speichern
 
Hallo Marco13

danke für deine Antwort.

Ich bin mir jetzt nicht ganz sicher, ob ich alles richtig verstanden habe.

also im TestDriver bei

Java:
myEmployeeObject.setFirstName("DasWasAlsNameGesetztWerdenSoll");

geschieht eigentlich folgendes: das "DasWasAlsNameGesetztWerdenSoll" wird in FirstName gespeichert? Und dann läuft das eigentliche Programm ab, wo ich diesen Namen dann nochmals überschreibe? So sollte das ja eigentlich nicht sein. Ich will ja mit dem Testdriver eigentlich nur den Employee Code aufrufen und dort dann erst einen Vornamen eingeben.

edit: du erwähnst, dass dies so gelöst werden könnte, dass ich die Eingabe in der Main Methode des TestDrivers mache, so würde dann auch erst wirklich ein String übergeben, wenn ich das Programm starte, oder?


edit2: mit dem Tipp, dass ich die Eingabe in der Main Methode abwickeln soll, läufts schon viel besser 🙂 ich glaube so kann ich weitermachen.

ich frage mich jetzt aber, ob ich in der employee Klasse auch weitere "public void"s wie zbsp

Code:
public void setXYName (String XYName) {

einfügen darf, oder ob dass nicht so erwünscht ist?
 
Zuletzt bearbeitet:
Ohje 😉

Kann man alles gerne machen . Du kannst soviele Methoden bauen wie du möchstest ob mit void oder return.


Du musst halt aufpassen, dass keine dieser Methoden in der Main definiert wird , sondern lediglich außerhalb.

Java:
public void methode(){
		
	}
	
	public static void main(String[]args){
		
	}

Dann gibts in Java sogenannte Setter und Getter, mit dennen du die möglichkeit hast Varaiblen mit Werten zu füllen .

Bereich : Kapselung.


Wenn du es aber so machen möchtest, wie du es bisher gemacht hast: Dann überlädst du eine Methode mit Parametern.

In der main Methode füllst du diese Parameter und übergibst sie der Methode. Diese nutzt die Werte und wird ausgeführt.

Am ende wird denn System.out.. ausgespuckt.


Das ist jetzt ziemlich schnell von mir hingeklirrt und ich weiß nicht ob du die Werteübergabe in Java verstanden hast.

call by reference

Referenz

grüße
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben