Probleme mit set-/get-Methode

Hallo,

ich habe folgende (für mich noch unlösbare) Aufgabe in Java. :bahnhof:
Aufgabe:
Kursverwaltung
Implementieren Sie eine Klasse Kurs mit den folgenden Attributen:
• titelKurs repräsentiert den Namen des Kurses.
• kostenlos speichert, ob der Kurs kostenlos ist oder nicht.
• nameKursleiter speichert den Namen des Kursleiters
• Anzahl speichert die Anzahl der angemeldeten Teilnehmer
3 Punkte
Wählen sie die Typen entsprechend sinnvoll. Die Attribute sollen nur in der Klasse sichtbar sein, fügen Sie deshalb set- und get-Methoden hinzu. Schreiben Sie eine Testklasse mit einer main-Methode, in der Sie mindestens drei verschiedene Kurse anlegen und alle Attribute setzten. Geben Sie nun den Inhalt der Objekte auf der Konsole aus.

Und hier ist mein Ansatz:
Java:
public class Kurs
{
	private String titelKurs;
	private boolean kostenlos;
	private String nameKursleiter;
	private int Anzahl;
	{
		String setTitelKurs(String a)
		{	
			titelKurs = a;
		}
		String getTitelKurs()
		{
			return(titelKurs);
		}
		boolean setKostenlos(boolean b)
		{
			kostenlos =b;
		}
		boolean getKostenlos()
		{
			return(kostenlos);
		}
		String setNameKursleiter(String c)
		{
			nameKursleiter = c;
		}
		String getNameKursleiter()
		{
			return(nameKursleiter);
		}
		int setAnzahl(int d)
		{
			Anzahl =d;
		}
		int getAnzahl()
		{
			return(Anzahl);
		}
	}
public static void main(String[] args)
{
System.out.println("");
}
}
 
Ja :shock:

Ich habe versucht den ersten Teil der Aufgabe in Form eines Quellcodes zu formulieren, den zweiten Teil habe ich noch nicht bearbeitet, da ich erst einmal schauen wollte, ob ich Fehler im ersten Teil habe.
Diese sind anscheinend zahlreich.
Ich finde sie nicht. Kann mir jemand helfen?
 
was soll denn das?
Java:
    private int Anzahl;
    {


wieso machst du da noch geschweifte klammern hin?
 
Wenn du jetzt noch postest WELCHE Fehler WO auftreten dann können wir dir auch weiterhelfen 🙂

Auf den ersten Blick:
- setter haben keine Rückgabewerte
- Klammerung um die Methoden passt nicht
 
Mir fehlt bei allen Methoden die Angabe der Vsisibilty also
public ...

Weiterhin gibt es zwei Möglichkeiten der getter für boolean-Attribute und ich würde die zweite Version nehmen weil dann der Code "lesbarer" wird:
Java:
public boolean is Kostenlos() {
 return(kostenlos);
}

Und ich bemerke, dass Du noch keine 3 Kurse instanzierst und diese dann ausgibst:
Java:
	public static void main(String[] args) {
		Kurse[] allKurse = new Kurse[] { 
                                             new Kurs("Kurs1", false, "Kursleiter", 10),
                                             new Kurs("Kurs2", true, "Kursleiter", 10),
                                             new Kurs("Kurs3", false, "Kursleiter2", 20),
                };
		for (String kurs : allKurse)
			System.out.println(kurs);
	}
        for(Kurs kurs : allKurse)
              System.out.println(kurs);
        }
}
Und damit der Code funzt benötigst Du noch einen passenden Konstruktor und musst die toString()-Methode überschreiben, damit auf der Console was Schönes angezeigt wird.
 
Also ich habe folgendes überarbeitet:
Java:
public class Kurs
{
	private String titelKurs;
	private boolean kostenlos;
	private String nameKursleiter;
	private int Anzahl;
	
		public String setTitelKurs(String a)
		{	
			titelKurs = a;
		}
		public String getTitelKurs()
		{
			return(titelKurs);
		}
		public boolean setKostenlos(boolean b)
		{
			kostenlos =b;
		}
		public boolean isKostenlos()
		{
			return(kostenlos);
		}
		public String setNameKursleiter(String c)
		{
			nameKursleiter = c;
		}
		public String getNameKursleiter()
		{
			return(nameKursleiter);
		}
		public int setAnzahl(int d)
		{
			Anzahl =d;
		}
		public int getAnzahl()
		{
			return(Anzahl);
		}
	
public static void main(String[] args)
{
  Kurse[] allKurse = new Kurse[] { 
                                             new Kurs("Kurs1", false, "Kursleiter", 10),
                                             new Kurs("Kurs2", true, "Kursleiter", 10),
                                             new Kurs("Kurs3", false, "Kursleiter2", 20),
                };
        for (String kurs : allKurse)
            System.out.println(kurs);
    }
        for(Kurs kurs : allKurse)
              System.out.println(kurs);
        }

Aber er spuckt folgende Fehlermeldung aus:


Kurs.java:51: illegal start of type
for(Kurs kurs : allKurse)
^
Kurs.java:51: ')' expected
for(Kurs kurs : allKurse)
^
Kurs.java:51: <identifier> expected
for(Kurs kurs : allKurse)
^
Kurs.java:52: <identifier> expected
System.out.println(kurs);
^
Kurs.java:52: <identifier> expected
System.out.println(kurs);
^
5 errors

Was ist jetzt falsch ?
 
Die Klasse Kurse gibt es nicht

Setter haben i.d.R. keinen Rückgabewert. Bzw wenn du einen angibst, dann musst du den auch zurückgeben. "return xxx".

for (String bla : kurse) geht nicht. Da Kurs kein String ist.

Ich würde mir ein Buch nehmen und nochmal die Grundlagen checken.
 
Ich hoffe, dass ich euch richtig verstanden habe (mit dem "Setter" haben i.d.R. keinen Rückgabewert):
Bsp:
Java:
public void setKostenlos(boolean b)
     {kostenlos=b;}
public boolean isKostenlos()
     {return(kostenlos);}

Stimmt dies ?

Ich habe mein Quellcode folgendermaßen geschrieben:
Java:
public class Kurs
{
	private String titelKurs;
	private boolean kostenlos;
	private String nameKursleiter;
	private int Anzahl;
	
		public void setTitelKurs(String a)
		{	
			titelKurs = a;
		}
		public String getTitelKurs()
		{
			return(titelKurs);
		}
		public void setKostenlos(boolean b)
		{
		kostenlos=b;
		}
		public boolean isKostenlos()
		{
			return(kostenlos);
		}
		public void setNameKursleiter(String c)
		{
			nameKursleiter = c;
		}
		public String getNameKursleiter()
		{
			return(nameKursleiter);
		}
		public void setAnzahl(int d)
		{
			Anzahl =d;
		}
		public int getAnzahl()
		{
			return(Anzahl);
		}
	
public static void main(String[] args)
{
  Kurs[] allKurs = new Kurs[] { 
                                             new Kurs("Kurs1", false, "Kursleiter", 10),
                                             new Kurs("Kurs2", true, "Kursleiter", 10),
                                             new Kurs("Kurs3", false, "Kursleiter2", 20),
                };
        for (String Kurs : allKurs)
            System.out.println(Kurs);
    }
    
        }

Nur leider gibt er noch Fehler im unteren Viertel aus:

Kurs.java:44: cannot find symbol
symbol : constructor Kurs(java.lang.String,boolean,java.lang.String,int)
location: class Kurs
new Kurs("Kurs1", false, "Kursleiter", 10),
^
Kurs.java:45: cannot find symbol
symbol : constructor Kurs(java.lang.String,boolean,java.lang.String,int)
location: class Kurs
new Kurs("Kurs2", true, "Kursleiter", 10),
^
Kurs.java:46: cannot find symbol
symbol : constructor Kurs(java.lang.String,boolean,java.lang.String,int)
location: class Kurs
new Kurs("Kurs3", false, "Kursleiter2", 20),
^
Kurs.java:48: incompatible types
found : Kurs
required: java.lang.String
for (String Kurs : allKurs)
^
4 errors

Was stimmt im Quelltext nicht? ???:L
 
Kurs.java:44: cannot find symbol
symbol : constructor Kurs(java.lang.String,boolean,java.lang.String,int)
location: class Kurs
new Kurs("Kurs1", false, "Kursleiter", 10),
^
Kurs.java:45: cannot find symbol
symbol : constructor Kurs(java.lang.String,boolean,java.lang.String,int)
location: class Kurs
new Kurs("Kurs2", true, "Kursleiter", 10),
^
Kurs.java:46: cannot find symbol
symbol : constructor Kurs(java.lang.String,boolean,java.lang.String,int)
location: class Kurs
new Kurs("Kurs3", false, "Kursleiter2", 20),
^
Kurs.java:48: incompatible types
found : Kurs
required: java.lang.String
for (String Kurs : allKurs)
^
4 errors

Was stimmt im Quelltext nicht? ???:L

Du hast ja auch keinen Konstruktor.
 
Du hast ja auch keinen Konstruktor.

Bzw. nur den (leeren) Default Constructor. Mit dem aktuellen Code kannst du Werte nur so abfüllen:
Java:
Kurs kurs = new Kurs("Kurs1", false, "Kursleiter", 10);
kurs.setTitelKurs("Kurs1");
kurs.setKostenlos(false);
// ...
Ansonsten implementier einen Konstruktor:
Java:
public Kurs(String titelKurs, ...) {
    setTitelKurs(titelKurs);
    // ...
}
 
@TE darf ich dich fragen was du grade machst? Du bearbeitest doch sicherlich eine Aufgabe aus einem Java-Kurs, Buch oder wasauchimmer, oder? Ich kann kaum glauben, dass der Konstruktor dort noch nicht besprochen wurde. Ich würde dich bitten, dir das Kapitel über den Konstruktor nochmal anzusehen, da dieser in deinem Fall benötigt wird, und da du auch im weiteren Kurs nicht ohne den Konstruktor auskommen wirst.
 
Könnt ihr mir bitte sagen in welcher Zeile ich den Konstruktor einsetzen soll? Ich weiß es wirklich nicht.
Habe es gerade in Zeile 43 versucht, aber nur Fehlermeldungen erhalten
Und er muss doch lauten:
Java:
Kurs kurs = new Kurs("Kurs1", false, "Kursleiter", 10);
kurs.setTitelKurs("Kurs1");
kurs.setKostenlos(false);
kurs.setNameKursleiter("Kursleiter");
kurs.setAnzahl(10);
Oder ?
 
Könnt ihr mir bitte sagen in welcher Zeile ich den Konstruktor einsetzen soll? Ich weiß es wirklich nicht.
Habe es gerade in Zeile 43 versucht, aber nur Fehlermeldungen erhalten
Und er muss doch lauten:
Java:
Kurs kurs = new Kurs("Kurs1", false, "Kursleiter", 10);
kurs.setTitelKurs("Kurs1");
kurs.setKostenlos(false);
kurs.setNameKursleiter("Kursleiter");
kurs.setAnzahl(10);
Oder ?

Wie ich bereits sagte, schlag nochmal das Kapitel über den Konstruktor auf...

Java:
class Kurs {
    Kurs(String a, boolean b, String c, int d){
        /* Do anything */
    }
}
Das ist ein Konstruktor.
 
OK, ich hab noch einmal nachgelesen, ein Konstruktor wird ist eine spezielle Methode , die aufgerufen wird, wenn ein Objekt erzeugt ( oder beseitigt ) wird.
Der Konstruktor wird als public vereinbart, hat denselben Namen wie die Klasse und gibt keinen Wert zurück.

Java:
class Kurs {
    Kurs(String a, boolean b, String c, int d){
        /* Do anything */
    }
}

Somit müsste der Konstruktor in Zeile 3 stehen ?
 
OK, ich hab noch einmal nachgelesen, ein Konstruktor wird ist eine spezielle Methode , die aufgerufen wird, wenn ein Objekt erzeugt ( oder beseitigt ) wird.
Richtig, bis auf den Müll in den Klammern 😉
Der Konstruktor wird als public vereinbart, hat denselben Namen wie die Klasse und gibt keinen Wert zurück.
1. Er muss nicht public sein. Aber er definiert durch seine Sichtbarkeit von wo du ihn aufrufen kannst.
2. Ja, er heisst wie die Klasse
3. Naja, eigentlich gibt er einen Wert zurück, aber nicht etwas für den Programmierer ersichtliches. Nämlich das gerade erstellte Objekt.
Somit müsste der Konstruktor in Zeile 3 stehen ?

Es ist völlig irrelevant wo der Konstruktor hingeschrieben wird. Die Methoden müssen sonst auch nicht nach Alphabet sortiert geschrieben werden 😉
 
Java:
public class Kurs {
	private String titelkurs;
	private boolean kostenlos;
	private String nameKursleiter;
	private int Anzahl;
	
	public void settitelkurs (String a){
		titelkurs = a;
	}
	public String gettitelkurs(){
		return titelkurs;
	}
	
	public void setkostenlos (boolean b){
		kostenlos = b;
	}
	public boolean getkostenlos(){
		return kostenlos;
	}
	
	public void setnameKursleiter (String c){
		nameKursleiter = c;
	}
	public String getameKursleiter(){
		return nameKursleiter;
	}
	
	public void setAnzahl(int d){
		Anzahl = d;
	}
	public int getAnzahl(){
		return Anzahl;
	}
}

class Kurs2 {
	Kurs2 (String a, boolean b, String c, int d){
	}
	
	public static void main(String[] args) {
		
		Kurs2 kurs = new Kurs2("Kurs 1", false, "Kursleiter", 10);
		Kurs2 kurs2 = new Kurs2("Kurs 2", true, "Kursleiter 2", 7);
		Kurs2 kurs3 = new Kurs2("Kurs 3", true, "Kursleiter 3", 4);
	}
}
Wie kann ich die Inhalte der Objekte auf der Konsole ausgeben? Mit System.out.println‎(); hat es nicht funktioniert.
 
Wie kann ich die Inhalte der Objekte auf der Konsole ausgeben? Mit System.out.println‎(); hat es nicht funktioniert.

Dies zu erklären würde dich jetzt nur verwirren und es einfach vom wem kopieren wäre nicht nützlich.
Am besten schreibst du dir eine eigene Objektmethode, welche alle Datenfelder (titelkurs, kostenlos, ..)
auf der Konsole ausgibt.
Anschließend rufst du diese Objektmethode auf kurs, kurs2, ... auf.

Ist auch gleich eine schöne Übung 😉
 
@Y2Jerichoholic: wenn du einen Konstruktor für die Klasse [c]Kurs[/c] benötigst, warum schreibst du denn nicht in der Klasse [c]Kurs[/c] den Konstruktor?
 
Java:
public class Kurs {
	private String titelkurs;
	private boolean kostenlos;
	private String nameKursleiter;
	private int Anzahl;
	
	public void settitelkurs (String a){
		titelkurs = a;
	}
	public String gettitelkurs(){
		return titelkurs;
	}
	
	public void setkostenlos (boolean b){
		kostenlos = b;
	}
	public boolean getkostenlos(){
		return kostenlos;
	}
	
	public void setnameKursleiter (String c){
		nameKursleiter = c;
	}
	public String getameKursleiter(){
		return nameKursleiter;
	}
	
	public void setAnzahl(int d){
		Anzahl = d;
	}
	public int getAnzahl(){
		return Anzahl;
	}
}

class Kurs2 {
	Kurs2 (String a, boolean b, String c, int d){
	}
	
	public static void main(String[] args) {
		
		Kurs2 kurs = new Kurs2("Kurs 1", false, "Kursleiter", 10);
		Kurs2 kurs2 = new Kurs2("Kurs 2", true, "Kursleiter 2", 7);
		Kurs2 kurs3 = new Kurs2("Kurs 3", true, "Kursleiter 3", 4);
	}
}
Wie kann ich die Inhalte der Objekte auf der Konsole ausgeben? Mit System.out.println‎(); hat es nicht funktioniert.

Ganz ehrlich, es tut sehr weh diesen code da zu sehen 🙁 ... zu deiner Frage, so garnicht!
 
Java:
public class Kurs {
	private String titelkurs;
	private boolean kostenlos;
	private String nameKursleiter;
	private int Anzahl;
	
	public void settitelkurs (String a){
		titelkurs = a;
	}
	public String gettitelkurs(){
		return titelkurs;
	}
	
	public void setkostenlos (boolean b){
		kostenlos = b;
	}
	public boolean getkostenlos(){
		return kostenlos;
	}
	
	public void setnameKursleiter (String c){
		nameKursleiter = c;
	}
	public String getameKursleiter(){
		return nameKursleiter;
	}
	
	public void setAnzahl(int d){
		Anzahl = d;
	}
	public int getAnzahl(){
		return Anzahl;
	}
	
	Kurs (String a, boolean b, String c, int d){
	}
	
	public static void main(String[] args) {
		
		Kurs kurs = new Kurs("Kurs 1", false, "Kursleiter", 10);
		Kurs kurs2 = new Kurs("Kurs 2", true, "Kursleiter 2", 7);
		Kurs kurs3 = new Kurs("Kurs 3", true, "Kursleiter 3", 4);
	}
}
So auch nicht?
 
Java:
public class Kurs {
	private String titelkurs;
	private boolean kostenlos;
	private String nameKursleiter;
	private int Anzahl;
	
	public void settitelkurs (String a){
		titelkurs = a;
	}
	public String gettitelkurs(){
		return titelkurs;
	}
	
	public void setkostenlos (boolean b){
		kostenlos = b;
	}
	public boolean getkostenlos(){
		return kostenlos;
	}
	
	public void setnameKursleiter (String c){
		nameKursleiter = c;
	}
	public String getameKursleiter(){
		return nameKursleiter;
	}
	
	public void setAnzahl(int d){
		Anzahl = d;
	}
	public int getAnzahl(){
		return Anzahl;
	}
	
	Kurs (String a, boolean b, String c, int d){
	}
	
	public static void main(String[] args) {
		
		Kurs kurs = new Kurs("Kurs 1", false, "Kursleiter", 10);
		Kurs kurs2 = new Kurs("Kurs 2", true, "Kursleiter 2", 7);
		Kurs kurs3 = new Kurs("Kurs 3", true, "Kursleiter 3", 4);
	}
}
So auch nicht?

Natürlich nicht, versuchst du jetzt wie ein "Affe" einfach was hin und her zu schieben, ändern usw. ?
Galileo Computing :: Java ist auch eine Insel - 5 Eigene Klassen schreiben
 
Wenn du weißt was Klassen und Objekte sind:

Galileo Computing :: Java ist auch eine Insel - 3 Klassen und Objekte

kannst du dann mal schauen wie man Klassen schreibt:

Galileo Computing :: Java ist auch eine Insel - 5 Eigene Klassen schreiben


Denn du versuchst eine korrekte Klasse zu schreiben,
aber ich glaube sowohl syntaktisch (von der Struktur) und semantisch (vom Sinn)
hat man das Gefühl, dass du dich damit noch nicht viel beschäftigt hast.

Java ist so eine schöne leichte Sprache wenn man sich ein wenig einliest 😉
Und beißen tut sie dich auch nicht^^
 

Ich beglückwünsche dich. Du hast es geschafft, dass dein Konstruktor die 4 Werte annimmt.

Wie du aber zwischen den {} (Dem Konstruktor-body) sehen kannst, tut der Konstruktor auch sehr viel, nämlich nichts.

Ich gebe dir nen tipp: Speichere die dem Konstruktor übergebenen Werte mal in der Instanz und ließ dir das Kapitel über Konstruktor nochmal genau durch.
 
Ich empfehle dir nicht a,b,c,d zu benutzen sondern die Parameter auszuschreiben, dann wird die Geschichte nur halb so verwirrend.

Solange du die übergeben Parameter nicht irgendwo abspeicherst, wird der Konstruktor nicht viel nützen.

Java:
Kurs (String titelkurs, boolean kostenlos, String nameKursleiter, int anzahl){
         this.titelkurs=titelkurs;
         this.kostenlos=kostenlos;
         this.nameKursleiter=nameKursleiter;
         this.anzahl=anzahl;
    }
 

Neue Themen


Zurück
Oben