ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
6635
6635
EMPFEHLEN
-
Hallo Java-Gemiende,
ich möchte gern aus einer parameterlosen void-Methode einer Klasse eine andere Klasse aufrufen ?
Code :1 2 3 4
void printAufgaben(){ System.out.println("Aufgabe: " + getAufgabenBeschreibung() + ", max. Punkte "); };
auf eine Methode in der Klasse Aufgabe:
Code :1 2 3 4 5 6 7 8
... private String aufgabenBeschreibung; ... public String getAufgabenBeschreibung() { return aufgabenBeschreibung; } ...
zugreifen.
Im Hauptprogramm der Klasse Person wird der Konstruktor der Klasse Aufgabe mit folgenden Werten aufgerufen:
Code :1
Aufgabe a1 = new Aufgabe("Java 1", 15);
Ich kann das Objekt a1 nicht in der Methode printAufgaben verwenden:
Das geht so nicht. Wer hat eine Lösung ?Code :1 2 3 4
void printAufgaben(){ System.out.println("Aufgabe: " + a1.getAufgabenBeschreibung() + ", max. Punkte "); };
Vielen Dank für jede Hilfe.
GrußGeändert von mkoeni1 (09.04.06 um 16:06 Uhr) Grund: Irreführend formuliert
-
Wieso kann mir denn keiner antworten
Ich bin am verzweifeln.
Gruß
-
Wie lautet die Fehlermeldung?
Vg Erdal
-
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ß
-
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
-
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:
Code :1 2
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):
Bin ich in diesem Teil auf dem richtigen Weg ?Code :1 2 3 4 5
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 }
Das ganze sieht jetzt so aus: (Person.java)
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
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 Methodenoch keinen Ansatz, weil ich Probleme habe mit der parameterlosen Methode. Wie kann ich in dieser Methode mit Instanzen/Atrributen von anderen Klassen arbeiten ?Code :1
public void printAufgaben()
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/** * * 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ß
-
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/openb....htm#Xxx999378
Code :1 2 3 4 5 6 7 8 9 10 11
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
-
Hallo flashray,
ich habe jetzt mal meinen (fertigen) Code angehängt.
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.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
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 } }
Ich habe noch eine Frage: Wie kann ich mien 2 For schleifen in der Methode:
schachteln, damit ich die Ausgabe in einer Zeile hinbekomme ?Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
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 }
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ß
-
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.
ist die Schleifenbedingung der FOR-Schleife ausreichend.Code :1
aufgaben.size() == punkte.size()
Code :1 2 3 4 5 6 7 8 9
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
Ähnliche Themen
-
Ausführen einer void Methode als if-Bedingung
Von DudePr im Forum JavaAntworten: 13Letzter Beitrag: 07.12.09, 13:53 -
Grundsatzdiskussion: Methode, die Objekt der Klasse zurückliefert
Von Kryptaesthesie im Forum Java GrundlagenAntworten: 6Letzter Beitrag: 17.02.09, 14:24 -
auf public void methode zugreifen -- ich werd irre
Von d2mike im Forum JavaAntworten: 2Letzter Beitrag: 20.11.06, 09:14 -
Klasse nutzt Methode einer anderen Klasse
Von sasfed im Forum PHPAntworten: 2Letzter Beitrag: 06.02.06, 19:57 -
Auf Methode einer TabPage in einer TabControl zugreifen
Von eassy im Forum .NET ArchivAntworten: 0Letzter Beitrag: 29.04.04, 22:38





Zitieren
Login





