Benutzer Objekt erstellen lassen ?

Hallo,
ich sitze gerade an einer Aufgabe und komme nicht weiter :
“**Neben dem Konstruktor soll eine statische Methode zur Objekterzeugung vorhanden sein, die vom Benutzer
(mittels IO) alle nötigen Daten erfragt und ein Student-Objekt zurückliefert. **”

Ich kann bis jetzt nur Objekte erstellen in der Form : Student a = new Student();
Wenn der Benutzer ein Objekt erstellen darf, muss doch aus der Variablen a ein b oder c usw. werden. Und da Student a = new Student(); nur als Programierer eingeben kannst innerhalb des Codes komme ich nicht weiter.

Oder kann man es nur in einem Array umgesetzt :reflect:?

Beste Grüße,
Exci

Es geht darum, das der Benutzer die Daten die ein Objekt Student brauch angeben kann:
Name, Matrikelnummer, …

public static Student createStudent() {
   //Benutzer nach Studenten-Eigenschaften fragen
   //Studenten-Objekt erstellen und zurückliefern
}

Wo spielt da der Name der Variablen eine Rolle? Und wieso heißt es nicht politisch korrekt StudentIn oder Studierender? Fragen über Fragen…

Du sollst eine Methode schreiben, je der nach der Eingabe der Daten Student s = new Student(...); steht und s an den Aufrufer zurückgegeben wird.

bye
TT

[QUOTE=Landei]```
public static Student createStudent() {
//Benutzer nach Studenten-Eigenschaften fragen
//Studenten-Objekt erstellen und zurückliefern
}


Wo spielt da der Name der Variablen eine Rolle? Und wieso heißt es nicht politisch korrekt StudentIn oder Studierender? Fragen über Fragen...[/QUOTE]

Ah jetzt verstehe ich es :)
Sorry, bin wohl etwas müde.
Dann dürfte es ungefähr so ablaufen oder ?

```public static Student erzeugestudent(){
		Scanner sc = new Scanner(System.in);
		Student StudentObjekt = new Student();
		
		System.out.println("Geben sie den Namen ein: ");
		StudentObjekt .name = sc.next();
		System.out.println("Geben sie das Fach ein: ");		
		StudentObjekt .fach = sc.next();
		System.out.println("Geben sie das Semester ein: ");
		StudentObjekt .semester = sc.nextInt();
		System.out.println("Haben er sich zu prüfung angemeldet?: (True/false)  ");
		StudentObjekt .prüfungangemeldet = sc.nextBoolean();
		
		int nummer = sc.nextInt();
		
		if(nummer <=99999){
			a.matrikelnummer = nummer;
		}else{
			System.out.println("Nummer falsche");
		}
		
		return StudentObjekt ;
	}```

Variablennamen bitte klein schreiben und CamelCase benutzen!

Prinzipiell ginge es so, aber ich würde sagen, es ist kein guter Stil. Nun weiß ich nicht, ob die Student-Klasse fest vorgegeben ist, aber eigentlich sollte der Konstruktur die Initialisierung des Objekts übernehmen. Die Idee dahinter ist, dass nie versehentlich ein “halbfertiges” Objekt in Umlauf kommt. Gegen dieses Prinzip muss man hin und wieder verstoßen, wenn die Informationen einfach noch nicht vorhanden sind (oder wenn man von einem Framework gezwungen wird, der abscheulichen Bean-Spezifikation zu folgen), aber hier sehe ich eigentlich keinen guten Grund dafür.

public static Student erzeugeStudent(){
        Scanner sc = new Scanner(System.in);
        
        System.out.println("Geben sie den Namen ein: ");
        String name = sc.next();
        System.out.println("Geben sie das Fach ein: ");     
        String fach = sc.next();
        System.out.println("Geben sie das Semester ein: ");
        String semester = sc.nextInt();
        System.out.println("Haben er sich zu prüfung angemeldet?: (True/false)  ");
        boolean prüfungAngemeldet= sc.nextBoolean();
        
        int nummer = sc.nextInt();
        
        if(nummer < 0 || nummer >99999){
            throw new IllegalArgumentException("Nummer falsch");
        }
        
        return new Student(name, fach, semester, prüfungAngemeldet, nummer); //je nach Konstruktor
    }

Ok, verstehe. Dein Code sieht auch übersichtlicher aus als meiner und mit dem Konstruktor ist es auch eine bessere Lösung als meine version :o)

Vielen Dank ::pc!

Studierende, bei uns hieß es immer Studierende.

@Excikuter :

  //siehe Landei
}

public static void main(String... args) {
  for (int i = 0; i < 10; i++) {
    Studierenden s = createStudierenden();
  }
}```

Uns hat mal ein Prof mit “Liebe Studenten und Studerpel” angesprochen…

Ich weiß nicht, ich wollte mal mit einem Lehrenden sprechen, da hieß es nur, nich mein Fachbereich… duck, und weg…

@tom ate_Salta, ja, ich meinte public static void main, sollte aber keine Werbung für Netbeans usw. sein, siehe PN. :frowning:

Aber eigtl. hätte man so viel Transferleistung von @Excikuter und allen erwarten können, aber wenn es wichtig für dich ist…

Kann es sein, das du an der falschen stelle gerade gepostet hast :)?

Nein, ich bin nicht verwirrt. Zeile 5 sollte den Beginn der Definition einer “main”-Methode darstellen. Zu diesem Zeck habe ich nur psvm (String... args) {, was/von dem ein Teil einer/eine Abkürzung in der IDE NetBeans is, geschrieben. Daraufhin hat mich Tom… angeschrieben, ob ich das wirklich damit meine und dass andere doch nicht wüssten, was damit gemeint sei, und dass er das gerne ausschreiben wolle. Dazu hab’ ich halt ja geschrieben. Das war die ganze Geschichte.

Transferleistung

@iKnwWhtUDidLast : Hä was? Wieso ensteht da jetzt so ein riesen Thema drum. Werbung für Netbeans oder Intellij IDEA (woher ich eben diese Abkürzung kenne) ist doch in einem Entwicklerforum absolut kein Problem - solange es natürlich nicht in gespame ausartet. Btw hätte ich in dem psvm keine Werbung gesehen (nur so am Rande). Mir ging es einfach nur darum das ganze leserlicher zu gestalten. Früher hatte ich nur mit Eclipse gearbeitet, da hätte ich mit dem psvm absolut nichts anfangen können.

… und das Thema mit “Transferleistung” lassen wir jetzt auch mal gut sein, solche unnötigen Stichelleien enden sonst wieder nur in sinnlosem gebashe.