# Per void Methode auf Objekt einer Klasse zugreifen



## mkoeni1 (9. April 2006)

Hallo Java-Gemiende,

ich möchte gern aus einer parameterlosen void-Methode einer Klasse eine andere Klasse aufrufen ?

```
void printAufgaben(){
            System.out.println("Aufgabe: " + getAufgabenBeschreibung() + 
                       ", max. Punkte ");
        };
```

auf eine Methode in der Klasse Aufgabe:

```
...
private String aufgabenBeschreibung;
...

public String getAufgabenBeschreibung() {
        return aufgabenBeschreibung;
    }
...
```

zugreifen.


Im Hauptprogramm der Klasse Person wird der Konstruktor der Klasse Aufgabe mit folgenden Werten aufgerufen:

```
Aufgabe a1 = new Aufgabe("Java 1", 15);
```

Ich kann das Objekt a1 nicht in der Methode printAufgaben verwenden:

```
void printAufgaben(){
            System.out.println("Aufgabe: " + a1.getAufgabenBeschreibung() + 
                       ", max. Punkte ");
        };
```
Das geht so nicht. Wer hat eine Lösung ?

Vielen Dank für jede Hilfe.

Gruß


----------



## mkoeni1 (9. April 2006)

Wieso kann mir denn keiner antworten 

Ich bin am verzweifeln.


Gruß


----------



## flashray (9. April 2006)

Wie lautet die Fehlermeldung?

Vg Erdal


----------



## mkoeni1 (9. April 2006)

Hi flashray,

ich arbeite mit Eclipse, da ist jetzt keine einduetige Fehlermeldung erkennbar.
Ich kann einfach mal meine 2 Java-Dateine posten.

http://www.skv2.de/test/Aufgabe.java

http://www.Person.java


Eigentlich ist alles ganz einfach, aber ich stehe auf dem Schlauch.
Schnell erklärt will ich einfach 3 Objekte einer Klasse in einem Vector speichern und dann per casting darauf zugreifen.

Ich bekomme es aber nicht hin.


Gruß


----------



## flashray (9. April 2006)

Da hast du so einige Fehler drin.

Du erstellst drei Objekte der Klasse Aufgabe a1,a2,a3 in der main-Methode und möchtest darauf in Methoden der Klasse Person zugreifen. Das geht natürlich nicht. Du müsstest sie entweder ganz oben bei den Klassenattributen hinschreiben oder den Methoden übergeben.

Anderer Fehler, die Methode bearbeiteteAufgabe benötigt zwei Argumente, du hast aber keine übergeben.

Den Vector aufgaben hast du auch in der main-Methode erzeugt, möchtest aber in der printAufgaben Methode darauf zugreifen.

Objekte die in Methoden referenziert und erzeugt werden sind nur innerhalb dieser zugreifbar sofern sie nicht als Argument übergeben werden.

So viel fürs erste mal. Verbessere bitte diese. Dan schauma weida!


Vg Erdal


----------



## mkoeni1 (10. April 2006)

Hallo flashray,

ich erstelle in der main-Methode 3 Objekte (a1, a2, a3) der Klasse Aufgabe. Das ist auch OK soweit.

Die Vectoren initialisiere ich jetzt nicht mehr in der main-Methode, sondern in der Klasse Person.java:


```
private Vector aufgaben = new Vector(); // Elemente vom Typ "Aufgabe"
    private Vector punkte = new Vector(); // Elemente vom Typ int
```

die Objekte der Klasse Vector ( aufgaben und punkte) definiere ich jetzt wie beschrieben in der Klasse Person.

Soweit richtig mit diesem Teil?


An die Methode "bearbeiteteAufgabe" gebe ich jetzt die folgenden 2 Parameter mit und speicher die punkteAuf in der Wrapper-Klasse punkt (Integer):

```
void bearbeiteteAufgabe(Aufgabe a, int punkteAuf) {
        Integer punkt = new Integer(punkteAuf); // neue Wrapper-Klasse Integer
        punkte.add(punkt);  // an den Vector punkte anhängen
        aufgaben.addElement(a);   // an den vector aufgaben anhängen
    }
```
Bin ich in diesem Teil auf dem richtigen Weg ?


Das ganze sieht jetzt so aus: (Person.java)

```
import java.util.Vector;

/*
 * Created on 05.04.2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author M
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Person {
    
    //Aufgabe 3.1
    /*
     * private Attribute
     */
    private String name;
    private String vorname;
    private int matrikelnummer;
    private int semester = 27;
    
    
    /*
     * vector
     *
     * Aufgabe 3.3) 
     * 
     */
    Vector aufgaben = new Vector(); // Elemente vom Typ "Aufgabe"
    Vector punkte = new Vector(); // Elemente vom Typ int
    
    
    /**
     * Konstruktor
     */
    public Person(String name, String vorname, int matrikelnummer, int semester) {
        this.name = name;
        this.vorname = vorname;
        this.matrikelnummer = matrikelnummer;
        this.semester = semester;
        // TODO Auto-generated constructor stub
    } // Konstruktor
    
    
    /**
     * Konstruktor 2
     */
    public Person() {
    } // Konstruktor 2
    
    
    
    /**
     * 
     * Die Semesteranzahl wird um eins erhoeht
     */
    void erhoeheSemester(){
            this.semester++;
        };

        
        /**
         * Bearbeiten von Aufgaben.
         * (Die Menge von Aufgaben und Punkten wird
         * erweitert).
         * @param a Aufgabe, die bearbeitet wurde.
         * @param punkte Punkte, die fuer diese Aufgabe     
         *                      erreicht wurden.
         * 
         */
    public void bearbeiteteAufgabe(Aufgabe a, int punkteAuf) {
        // punkteAuf == erreichte Punkte
        Integer punkt = new Integer(punkteAuf);
        punkte.add(punkt);
        aufgaben.addElement(a);
        
    }
    
    /**
     * 
     * Liefert als Ergebnis die Summe aller erreichten Punkte.
     */
    public int summe(){
        //
        
        return 0;
            
    };
        
        
    /**
     * 
     * Gibt alle bearbeiteten Aufgaben aus,
     * und zwar jeweils die Attributwerte von:
     * aufgabenBeschreibung (Attribut aus Klasse Aufgabe), 
     * maxPunkte (Attribut aus Klasse Aufgabe), punkte (Vector Element
     * vom Typ int).
     */
        public void printAufgaben(){
            // hier weis ich noch nicht wie es geht !
            
            /* for(int i = 0; i< aufgaben.size(); i++){
                System.out.println("Aufgabe: " + // + 
                                   ", max. Punkte " + // getMaxPunkte() + 
                                   ", erreichte Punkte: " // + bearbeiteteAufgabe() 
                );
            */
            
        }

    /**
     * @return Returns the matrikelnummer.
     * 
     * @uml.property name="matrikelnummer"
     */
    public int getMatrikelnummer() {
        return matrikelnummer;
    }

    /**
     * @param matrikelnummer The matrikelnummer to set.
     * 
     * @uml.property name="matrikelnummer"
     */
    public void setMatrikelnummer(int matrikelnummer) {
        this.matrikelnummer = matrikelnummer;
    }

    /**
     * @return Returns the name.
     * 
     * @uml.property name="name"
     */
    public String getName() {
        return name;
    }

    /**
     * @param name The name to set.
     * 
     * @uml.property name="name"
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return Returns the semester.
     * 
     * @uml.property name="semester"
     */
    public int getSemester() {
        return semester;
    }

    /**
     * @param semester The semester to set.
     * 
     * @uml.property name="semester"
     */
    public void setSemester(int semester) {
        this.semester = semester;
        erhoeheSemester();
    }

    /**
     * @return Returns the vorname.
     * 
     * @uml.property name="vorname"
     */
    public String getVorname() {
        return vorname;
    }

    /**
     * @param vorname The vorname to set.
     * 
     * @uml.property name="vorname"
     */
    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    
    
    // main-Methode
    public static void main(String[] args) {
        Person ich = new Person("Maier", "Franz", 34567, 27 );
        System.out.println(ich.getName() + ", " +ich.getVorname());
        
        Aufgabe a1 = new Aufgabe("Java 1", 15);
        Aufgabe a2 = new Aufgabe("Java 2", 15);
        Aufgabe a3 = new Aufgabe("Java 3", 15);
        

        ich.bearbeiteteAufgabe(a1, 15);    // 
        ich.bearbeiteteAufgabe(a2, 15);    //
        
        ich.printAufgaben();    // noch kein Ansatz
        
        System.out.println(ich.getSemester());
        }
    }
```

Alerdings habe ich in der Methode 
	
	
	



```
public void printAufgaben()
```
 noch keinen Ansatz, weil ich Probleme habe mit der parameterlosen Methode. Wie kann ich in dieser Methode mit Instanzen/Atrributen von anderen Klassen arbeiten ?

```
/**
     * 
     * Gibt alle bearbeiteten Aufgaben aus,
     * und zwar jeweils die Attributwerte von:
     * aufgabenBeschreibung (Attribut aus Klasse Aufgabe), 
     * maxPunkte (Attribut aus Klasse Aufgabe), punkte (Vector Element
     * vom Typ int).
     */
        public void printAufgaben(){
            // hier weis ich noch nicht wie es geht !
            
            /* for(int i = 0; i< aufgaben.size(); i++){
                System.out.println("Aufgabe: " + // + 
                                   ", max. Punkte " + // getMaxPunkte() + 
                                   ", erreichte Punkte: " // + bearbeiteteAufgabe() 
                );
            */
            
        }
```

Sieht die Klasse Person programmiertechnisch jetzt besser aus ? Bin über jede Hilfe dankbar.



Vielen Dank
Gruß


----------



## flashray (11. April 2006)

Hallo,

es gefällt mir nicht so ganz.    Das wird schon.    Bin a noch Anfänger!  

Ich hatte dir gesagt die Methode bearbeiteteAufgabe() benötigt zum Aufruf zwei Argumente. Ich kann unten keine sehen. Die Klammer ist Leer.
getMaxPukte() ist eine Methode der Klasse Aufgabe. Du kannst sie in einer anderen Klasse so wie hier nicht verwenden.

1.Du erstellst zuerst ein Objekt der Klasse Aufgabe:
Aufgabe aufgabe1 = new Aufgabe();
2. Du rufst die Methode mit dem neuen Objekt auf
aufgabe1.getMaxPunkte();

Du möchtest sie aber unten ohne Objekt aufrufen. Das geht nicht!

Lies dir mal bitte folgendes Kapitel der Java Insel durch um die Zusammenhänge von Klasse, Methode, Variable, Objekt, Aufrufe zu verstehen.
http://www.galileocomputing.de/openbook/javainsel5/javainsel06_000.htm#Xxx999378


```
public void printAufgaben(){
            // hier weis ich noch nicht wie es geht !
            
            /* for(int i = 0; i< aufgaben.size(); i++){
                System.out.println("Aufgabe: " + // + 
                                   ", max. Punkte " + // getMaxPunkte() + 
                                   ", erreichte Punkte: " // + bearbeiteteAufgabe() 
                );
            */
            
        }
```


Vg Erdal


----------



## mkoeni1 (12. April 2006)

Hallo flashray,

ich habe jetzt mal meinen (fertigen) Code angehängt.


```
import java.util.Vector;

/*
 * Created on 05.04.2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author M
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Person {
    
    //Aufgabe 3.1
    /*
     * private Attribute
     */
    private String name;
    private String vorname;
    private int matrikelnummer;
    private int semester = 27;
    
    
    /*
     * vector
     *
     * Aufgabe 3.3) 
     * 
     */
    Vector aufgaben = new Vector(); // Elemente vom Typ "Aufgabe"
    Vector punkte = new Vector(); // Elemente vom Typ int
    Vector punkteges = new Vector(); // Elemente vom Typ double
    
    
    /**
     * Konstruktor
     */
    public Person(String name, String vorname, int matrikelnummer, int semester) {
        this.name = name;
        this.vorname = vorname;
        this.matrikelnummer = matrikelnummer;
        this.semester = semester;
        // TODO Auto-generated constructor stub
    } // Konstruktor
    
    
    /**
     * Konstruktor 2
     */
    public Person() {
    } // Konstruktor 2
    
    
    
    /**
     * 
     * Die Semesteranzahl wird um eins erhoeht
     */
    void erhoeheSemester(){
            this.semester++;
        };

        
        /**
         * Bearbeiten von Aufgaben.
         * (Die Menge von Aufgaben und Punkten wird
         * erweitert).
         * @param a Aufgabe, die bearbeitet wurde.
         * @param punkte Punkte, die fuer diese Aufgabe     
         *                      erreicht wurden.
         * 
         */
    public void bearbeiteteAufgabe(Aufgabe a, int punktefuerAuf) {
        // punkteGes == erreichte Punkte
        int punkteGes = punktefuerAuf;    // überprüfen ob Punkte > 0 und <= Maximal-Punkte
        if(punkteGes>0 && punkteGes<=a.getMaxPunkte()){
            punkteGes = a.getMaxPunkte();
        }
        else
            punkteGes = 0;
        
        // Einspeisung punkteGes in einen zusätzlichen Vecor punkteges
        Double punktesum = new Double(punkteGes);
        punkteges.add(punktesum);
        
        Integer punkt = new Integer(punktefuerAuf);
        punkte.add(punkt);
        aufgaben.addElement(a);
        
    }
    
    /**
     * 
     * Liefert als Ergebnis die Summe aller erreichten Punkte.
     */
    public int summe(){
        // summe aller Punkte fuer bearbeitete Aufgaben
        double summepunktebearaufg = 0.0;
        for(int j=0; j< punkte.size();j++){
            Integer point = (Integer) punkte.elementAt(j);
            int pointp = point.intValue();
            summepunktebearaufg += pointp;
        }
        System.out.println("Stand: erreichte Punktzahl: " + summepunktebearaufg  + " von");
        
        // summe aller Punkte fuer Aufgaben
        double summepunkteges = 0.0;
        for(int k=0; k < punkteges.size();k++){
            Double sum = (Double) punkteges.elementAt(k);
            int pointp = sum.intValue();
            summepunkteges += pointp;
        }
        System.out.println(summepunkteges + " (Gesamtpunktzahl)");
        return 0;
            
    };
        
        
    /**
     * 
     * Gibt alle bearbeiteten Aufgaben aus,
     * und zwar jeweils die Attributwerte von:
     * aufgabenBeschreibung (Attribut aus Klasse Aufgabe), 
     * maxPunkte (Attribut aus Klasse Aufgabe), punkte (Vector Element
     * vom Typ int).
     */
        public void printAufgaben(){
            // Aufgabe 3.3            
            for(int i=0;i < aufgaben.size();i++){
                Aufgabe tmpobject = (Aufgabe) aufgaben.elementAt(i);
                System.out.println("Aufgabe: " + tmpobject.getAufgabenBeschreibung() +
                                    " max. Punkte: " + tmpobject.getMaxPunkte());
                                    
            }
            for(int j=0; j< punkte.size();j++){
                Integer point = (Integer) punkte.elementAt(j);
                int pointp = point.intValue();
                System.out.println("erreichte Punkte: "+ pointp);
            }
            
            summe(); // Aufgabe 3.3
            
        }

    /**
     * @return Returns the matrikelnummer.
     * 
     * @uml.property name="matrikelnummer"
     */
    public int getMatrikelnummer() {
        return matrikelnummer;
    }

    /**
     * @param matrikelnummer The matrikelnummer to set.
     * 
     * @uml.property name="matrikelnummer"
     */
    public void setMatrikelnummer(int matrikelnummer) {
        this.matrikelnummer = matrikelnummer;
    }

    /**
     * @return Returns the name.
     * 
     * @uml.property name="name"
     */
    public String getName() {
        return name;
    }

    /**
     * @param name The name to set.
     * 
     * @uml.property name="name"
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return Returns the semester.
     * 
     * @uml.property name="semester"
     */
    public int getSemester() {
        return semester;
    }

    /**
     * @param semester The semester to set.
     * 
     * @uml.property name="semester"
     */
    public void setSemester(int semester) {
        this.semester = semester;
        erhoeheSemester();
    }

    /**
     * @return Returns the vorname.
     * 
     * @uml.property name="vorname"
     */
    public String getVorname() {
        return vorname;
    }

    /**
     * @param vorname The vorname to set.
     * 
     * @uml.property name="vorname"
     */
    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    
    
    // main-Methode
    public static void main(String[] args) {
        Person ich = new Person("Maier", "Franz", 34567, 27 );
        System.out.println(ich.getName() + ", " + ich.getVorname() + ", Semester: " + ich.getSemester());
        
        Aufgabe a1 = new Aufgabe("Java 1", 15);
        Aufgabe a2 = new Aufgabe("Java 2", 13);
        Aufgabe a3 = new Aufgabe("Java 3", 15);
        
        ich.bearbeiteteAufgabe(a1, 8);    // Aufgabe 3.3 
        ich.bearbeiteteAufgabe(a2, 13);    // Aufgabe 3.3
        ich.bearbeiteteAufgabe(a3, 15);    // Aufgabe 3.3
        
        ich.printAufgaben();    // Aufgabe 3.3
        }
    }
```
Es ist mir klar geworden, wie sich Objekt in einem vektor verhalten. Wie ich Objekte beim zuruecklesen aus wieder Vector wieder in eine prim. Datentyp casten muss.

Ich habe noch eine Frage: Wie kann ich mien 2 For schleifen in der Methode:

```
public void printAufgaben(){
            // Aufgabe 3.3            
            for(int i=0;i < aufgaben.size();i++){
                Aufgabe tmpobject = (Aufgabe) aufgaben.elementAt(i);
                System.out.println("Aufgabe: " + tmpobject.getAufgabenBeschreibung() +
                                    " max. Punkte: " + tmpobject.getMaxPunkte());
                                    
            }
            for(int j=0; j< punkte.size();j++){
                Integer point = (Integer) punkte.elementAt(j);
                int pointp = point.intValue();
                System.out.println("erreichte Punkte: "+ pointp);
            }
            
            summe(); // Aufgabe 3.3
            
        }
```
schachteln, damit ich die Ausgabe in einer Zeile hinbekomme ?

Ich meine damit so:
Aufgabe: Java 1 max. Punkte: 15, erreichte Punkte: 8.
Aufgabe: Java 2 max. Punkte: 13, erreichte Punkte: 13
Aufgabe: Java 3 max. Punkte: 15, erreichte Punkte: 15

Bei mir steht das alles logischerweise untereinander:
Aufgabe: Java 1 max. Punkte: 15
Aufgabe: Java 2 max. Punkte: 13
Aufgabe: Java 3 max. Punkte: 15
erreichte Punkte: 8
erreichte Punkte: 13
erreichte Punkte: 15


Vielen dank für die Hilfe und für den link zu dem Buch-Kapitel
Gruß


----------



## mkoeni1 (12. April 2006)

Hallo flashtray,

es hat sich erledigt. ich habe es seleber hinbekommen. Nachdem die size() des Vectors aufgaben gleich groß der size des vectors punkte ist.

```
aufgaben.size() == punkte.size()
```
ist die Schleifenbedingung der FOR-Schleife ausreichend.


```
for(int i=0;i < aufgaben.size();i++){
                Aufgabe tmpobject = (Aufgabe) aufgaben.elementAt(i);
                Integer point = (Integer) punkte.elementAt(i);
                int pointp = point.intValue();
                System.out.println("Aufgabe: " + tmpobject.getAufgabenBeschreibung() +
                                    " max. Punkte: " + tmpobject.getMaxPunkte()+
                                    " erreichte Punkte: "+ pointp);
                                    
            }
```

Viele Grüße


----------

