Objektname - Benutzereingabe?

Status
Nicht offen für weitere Antworten.
K

KlappsKalli

Gast
Hallo allerseits!

Bin noch relativ unerfahren, was OOP angeht...

Also, ich arbeite zu Übungszwecken an einer Art Betriebssimulator, in dem man Mitarbeiter an verschiedenen Stellen einsetzen kann (Manager, Arbeiter, Sekretäre, etc.). Diesen kann man ein Gehalt zuweisen, und sie belohnen oder schikanieren, was sich dann auf deren Zufriedenheit auswirkt usw. usw. usw.

Also, jeder neue Mitarbeiter stellt ein Objekt der Klasse Mitarbeiter dar. Durch eine Benutzereingabe soll geprüft werden, welche Stelle er besetzt, welches Gehalt er bekommt und wie er heißt.
Nun stehe ich vor dem Problem, dass ja jedes Objekt nen Namen braucht. Besteht die Möglichkeit, den Namen des Objekts von der Benutzereingabe abhängig zu machen, also entweder Arbeiter1, Arbeiter2 oder evtl. den Nachnamen?

zur Verdeutlichung, das Objekt wird folgendermaßen erzeugt:


Mitarbeiter name des Objekts = new Mitarbeiter(name, gehalt, stelle)
 

Murray

Top Contributor
Welchen Namen eine lokale Variable irgendwo im Programm hat, sollte ein Anwendungsprogramm nicht interessieren (wenn Du natürlich einen Debugger / Einzelschrittsimulator programmieren willst, dann sieht das anders aus).

Warum meinst Du, den Variablennamen programmatisch auswerten zu müssen? Was willst Du erreichen?
 
K

KlappsKalli

Gast
Naja, der Benutzer soll ja schließlich mehrere Arbeiter erzeugen können.
Die können ja nicht programm-intern alle arbeiter1 heißen.

Es geht halt darum, dass jedes mal, wenn der benutzer einen neuen mitarbeiter einstellt, ein objekt erzeugt wird mit den attributen zufriedenheit, gehalt, etc.

Aber da es ja nicht direkt vorgegeben ist, wie viele Mitarbeiter, sprich Objekte am ende bestehen(das problem beginnt eigentlich schon beim zweiten angestellten der sleben stelle), kann ich das ja nicht schon vorher im code benennen.
Es soll also dynamisch vom benutzer ein neues objekt erzeugt werden.

Oder habe ich da grundsätzlich den falschen denkansatz?

Hier mein Code (hab erst angefangen, ist also noch sehr ungeordnet, dann ist mir das problem aufgefallen):
Sieht nach mehr aus, als es ist....
Smile

Die Main:

Code:
package betriebssimulator;

import java.util.Scanner;

public class Main 
{
    public static void main(String[] args) 
    {
        int gehalt;
        int job;
        String name;
        Scanner sc = new Scanner(System.in);
       
       
        System.out.println("Wen möchten Sie einstellen?");
        System.out.print("Name: ");
        name = sc.nextLine();
        System.out.println("");
       
        System.out.println("Zu besetzende Stelle: ");
            System.out.println("");
            System.out.println("    1. Manager/in");
            System.out.println("    2. Manager-Sekretär/in");
            System.out.println("    3. Verwaltungsfanchangestellte/r");
            System.out.println("    4. Produktionsleiter/in");
            System.out.println("    5. Arbeiter/in");
            System.out.println("    6. Mechaniker/in");
            System.out.println("    7. Hausmeister/in");
            System.out.println("");
        
        System.out.append("Gehalt: ");
        gehalt = sc.nextInt();
        
        Mitarbeiter = new Mitarbeiter(gehalt, job, name);

Mitarbeiter:

Code:
package betriebssimulator;

public class Mitarbeiter 
{
    int gehalt;
    int zufriedenheit;
        final int SEHR_ZUFRIEDEN = 100;
        final int ZUFRIEDEN = 75;
        final int NORMAL = 50;
        final int UNZUFRIEDEN = 25;
        final int SEHR_UNZUFRIEDEN = 0;
    String stelle;
    String name;
    
    Mitarbeiter(int gehalt, int job, String name)
    {
        this.zufriedenheit = NORMAL;
        this.gehalt = gehalt;
        this.name = name;
        switch (job)
        {
            case 1:
                this.stelle = "Manager/in";
                break;
            case 2:
                this.stelle = "Manager-Sekretär/in";
                break;
            case 3:
                this.stelle = "Verwaltungsfachangestellte/r";
                break;
            case 4:
                this.stelle = "Produktionsleiter/in";
                break;
            case 5:
                this.stelle = "Arbeiter/in";
                break;
            case 6:
                this.stelle = "Mechaniker/in";
                break;
            case 7:
                this.stelle = "Hausmeister/in";
                break;
            default:
                System.out.println("Falsche Eingabe!");
                break;
        }
        
        System.out.println("Sie haben " + this.name + " als " + this.stelle + "mit einem Gehalt von " + this.gehalt + " EUR eingestellt.");
        
    }
}
:)
 

0x7F800000

Top Contributor
wieso soll jeder Mitarbeiter einen eigenen bezeichner innerhalb des programms bekommen? Selbst wenn das so in der form möglich wäre, was sollte das bringen?

Wenn du mehrere mitarbeiter hast, dann pack die halt in ein array oder eine passende datenstruktur, wo ist das problem?
 
G

Guest

Gast
Also eines mal vorweg:

Hab mir vorhin schon ein paar Threads durchgelesen (den mit der Dartscheibe von horn27 fand ich klasse :D ), daher will ich schon mal klar stellen, dass es sich hier um KEINE HAUSAUFGABE handelt und ich auch nicht von der Mafia verfolgt werde oder ähnliches. Ich gehöre tatsächlich zu den (hoffentlich nicht so wenigen) Exemplaren Mensch, die wirklich Java lernen wollen.... sonst würde ich wohl auch nicht Freitag-Nacht zu hause hocken und programmieren. Dafür hab ich mir Christian Ullenbooms Java-Insel (Tolles Buch!) besorgt, aber speziell an dieser Stelle hilft sie mir nicht weiter.

Finde es auch ganz gut, dass ihr hier keine Komplettlösungen postet.

Das ist das erste Mal, dass ich mich an die OOP-Schiene heranwage, also habt bitte Verständnis, wenn ich mit Fragen komme, die in euren Augen vielleicht total hirnrissig sind.

Also, weiter zum Thema:

Wie meinst du das mit dem Array? Kann ich ein Array von Objekten erstellen, oder soll ich für jede Eigenschaft (Gehalt, etc.) ein eigenes Array aufmachen? Hab ich dann nicht immernoch das Probelm mit der flexiblen Größe bzw. Anzahl der Mitarbeiter?

Andrey hat gesagt.:
wieso soll jeder Mitarbeiter einen eigenen bezeichner innerhalb des programms bekommen? Selbst wenn das so in der form möglich wäre

Daraus entnehme ich, dass es so wohl nicht möglich ist...

Wie soll ich also in einem Array die einzelnen Mitarbeiter ansprechen bzw. auslesen können, um z.b. als Benutzer abfragen zu können, wie zufrieden der Mitarbeiter "Sklave14" ist?
 

KlappsKalli

Neues Mitglied
KlappsKalli hat gesagt.:
Finde es auch ganz gut, dass ihr hier keine Komplettlösungen postet.

Und nein: Ich bin nicht in der Schleimer-Phase eurer Marco-Skala angekommen... :D

Ok, hab mich erst mal hier im Forum registriert.

Ich bin schon zu müde, um noch klar genug denken können, dass ich überhaupt mein Problem noch richtig schildern könnte.

Ich werd mich morgen noch mal an euch wenden.

Bis dahin!
 

0x7F800000

Top Contributor
Anonymous hat gesagt.:
den mit der Dartscheibe von horn27 fand ich klasse
Hm, du stehst wohl unter anderem auf diesen schadenfreude-humor, wie? ;)
Dafür hab ich mir Christian Ullenbooms Java-Insel (Tolles Buch!) besorgt, aber speziell an dieser Stelle hilft sie mir nicht weiter.
Na, das glaub ich dir nicht ;) Es ist ziemlich groß und zunächst recht schwer zu überblicken, aber dass es dort keine lösung für ein derartig simples problem geben soll, trifft nicht ganz zu...
Arrays. Durchlesen, sind sowieso die grundlagen!
Datenstrukturen Auszugsweise auch durchlesen, die werden wesentlich öfter verwendet, als rohe arrays.

Finde es auch ganz gut, dass ihr hier keine Komplettlösungen postet.
Tun manche manchmal doch.
Wenn es zum verständnis wirklich was beiträgt.
Oder wenn jemand ein problem lösen muss, für das sehr viel spezialwissen gebraucht wird, und wo es einfach unzumutbar ist, alles den OP selbst implementieren zu lassen. Passiert verständlicherweise vergleichsweise selten.

Kann ich ein Array von Objekten erstellen,...
sicher.
oder soll ich für jede Eigenschaft (Gehalt, etc.) ein eigenes Array aufmachen?
sicher nicht. Ich kenne keine Sprache mehr, wo sowas monströses nötig wäre. Vor Zehn jahren bei qbasic hab ich das mal so gemacht, aber womöglich auch nur, weil ich das damals nicht besser wusste.
Hab ich dann nicht immernoch das Probelm mit der flexiblen Größe bzw. Anzahl der Mitarbeiter?
Ja, das problem besteht. wenn du willst, kannst du das problem zur übung allgemein lösen, also eine klasse erstellen, die beim wachsenden platzbedarf neuen größeren array anlegt und die alten daten dorthin kopiert. Aber nur zur Übung! Für sowas gibt es selbstverständlich schon alle denkbaren und undenkbaren datenstrukturen, etwa ArrayList oder LinkedList oder alles andere auch...
Andrey hat gesagt.:
wieso soll jeder Mitarbeiter einen eigenen bezeichner innerhalb des programms bekommen? Selbst wenn das so in der form möglich wäre

Daraus entnehme ich, dass es so wohl nicht möglich ist...
nein, ist es nicht. Bei Skriptsprachen, die manchmal recht elegant, aber auch eine größenordnung langsamer sind, ist sowas unter umständen möglich. Wozu das gut sein soll, fällt mir jedoch nicht so direkt ein.

Wie soll ich also in einem Array die einzelnen Mitarbeiter ansprechen bzw. auslesen können, um z.b. als Benutzer abfragen zu können, wie zufrieden der Mitarbeiter "Sklave14" ist?
steht in der insel. eckige klammer mit der nummer des benötigten eintrags dranschreiben, nichts weiter.

Wenn du speziell nach einem bestimmten Mitarbeiter suchen musst, müsstest du womöglich alle Mitarbeiter im array durchlaufen und jedes mal den namen Prüfen, das ist jedoch recht lahm, dazu gibt's wieder alle möglichen höchsteffizienten implementierungen für maps.
Bevor du sowas also tust, solltest du dir genau überlegen, ob du wirklich den einen mitarbeiter brauchst, oder eh alle durchlaufen musst.
Es ist immer ein großer unterschied, ob man etwas einmal oder mehrmals machen muss, und je nach Situation werden die einen oder die anderen algorithmen interessant.
 

KlappsKalli

Neues Mitglied
Ok, der Thread, den Landei verlinkt hat, hat mir glaub ich geholfen.

Ich werde mal versuchen, das ganze mit einer LinkedList umzusetzen.

Danke erstmal, ich schreib euch dann, ob es geklappt hat, oder an welcher Stelle ich damit noch Probleme habe.
 

NTB

Bekanntes Mitglied
Also bei der Art der Fragestellung hätte man ruhig konkreter helfen können, finde ich.
Du hast es ja schon angedeutet:

Erstelle Dir für jeden neuen Mitarbeiter ein neues Objekt. Das kann ruhig immer Mitarbeiter heissen. Und dieses Objekt packst Du in eine List (z.B. LinkedList, ArrayList). Die kann quasi beliebig groß werden. In dieser Liste brauchen die Objekte keine Namen, sondern Du kannst sie z.B. nacheinander durchgehen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
lougoldi Objektname abrufen Java Basics - Anfänger-Themen 3
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
W Objektname durch Tastaturbefehl eingeben Java Basics - Anfänger-Themen 7
M Erste Schritte übergebener String - Objektname Java Basics - Anfänger-Themen 1
O Objektname entspricht Eingabe eines Users Java Basics - Anfänger-Themen 4
R Objektname statt Adresse ausgeben Java Basics - Anfänger-Themen 4
C Objektname ermitteln Java Basics - Anfänger-Themen 3
G Objektname über Eingabe bestimmen Java Basics - Anfänger-Themen 4
C Vector / JTable / ObjektName Java Basics - Anfänger-Themen 4
M Variabler/dynamischer Objektname? Java Basics - Anfänger-Themen 12
M Benutzereingabe eines Codes verbessern Java Basics - Anfänger-Themen 3
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
D Input/Output Befehl aus Benutzereingabe herausfiltern Java Basics - Anfänger-Themen 12
J Stack mit Benutzereingabe Java Basics - Anfänger-Themen 17
A Reader für Benutzereingabe in Eclipse importieren Java Basics - Anfänger-Themen 3
Z Benutzereingabe überprüfen. Java Basics - Anfänger-Themen 2
B Input/Output Benutzereingabe mit BufferedReader Java Basics - Anfänger-Themen 7
NR_EIGHT Benutzereingabe in Funktion verpacken Java Basics - Anfänger-Themen 4
T Benutzereingabe in form von string wieder ausgeben in JOptionPane Java Basics - Anfänger-Themen 14
F Median berechnen, Benutzereingabe Problem! Java Basics - Anfänger-Themen 14
S Benutzereingabe über Scanner Klasse korrekt behandeln Java Basics - Anfänger-Themen 9
C Benutzereingabe Java Basics - Anfänger-Themen 41
D Benutzereingabe mit for-Schleife Java Basics - Anfänger-Themen 9
S Überprüfung Benutzereingabe Java Basics - Anfänger-Themen 5
D Wie auf leere Benutzereingabe (int) prüfen? Java Basics - Anfänger-Themen 16
J Programm beenden via Benutzereingabe Java Basics - Anfänger-Themen 8
S Problem bei Benutzereingabe Java Basics - Anfänger-Themen 9
G Benutzereingabe auf Konsole maskieren (Passworteingabe) Java Basics - Anfänger-Themen 4
S Benutzereingabe - Gross und Kleinschreibung ignorieren Java Basics - Anfänger-Themen 7
C Benutzereingabe vergleichen Java Basics - Anfänger-Themen 3
G Benutzereingabe Java Basics - Anfänger-Themen 2
G Benutzereingabe entgegennehmen Java Basics - Anfänger-Themen 9
U Benutzereingabe die Zeichen einzeln bearbeiten Java Basics - Anfänger-Themen 7
G Benutzereingabe erzwingen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben