Java, programmieren

Hallo, ich habe ein paar Probleme beim Lösen folgender Aufgabe, ich hoffe ihr könnt mir helfen:

a) Schreiben Sie eine Klasse Buch. Die Klasse Buch enthält die privaten Attribute autor, titel und genre vom Datentyp String sowie das private Attribut
lfdNr (laufende Nummer) vom Datentyp Integer.
b) Schreiben Sie für jedes der Attribute eine get-Methode. Die Klasse Buch
enthält keine set-Methoden.

Ich hab so angefangen, jedoch bekomme ich mehrere Fehlermeldungen ‚missing method body‘ und oben bei der Deklaration steht ‚illegal start of expression‘

public class Main {

public static void main(String[] args) {

private String autor, titel, genre;
int lfdNr;

String getAutor();
return autor;
String getTitel();
return titel;
String getGenre();
return genre;
int getLfdNr();
return lfdNr;
}
}

Hallo,

ich denke Dein Program hat so auszusehen:

public class Buch {

private String autor, titel, genre;
private int lfdNr;

public Buch() {
super();
}

public String getAutor() {
return autor;
}

public String getTitle() {
return titel;
}

public String getGenre() {
return genre;
}

public int getldfNr() {
return lfdNr;
}
}

Warum, das solltest Du dann hoffentlich selbst nachvollziehen können. :smile: Ansonsten Fragen!

Erstmal danke für die schnelle Antwort :smile:
doch ich habe noch ein paar Fragen:

‚illegal start of expression‘ Die Fehlermeldung taucht bei mir immer noch auf und zwar bei der Deklaration des Strings.

Und dann wollt ich noch wissen wofür der Ausdruck steht:

public Buch() {
super();

und vorallem dieses super()

Woher Du die Fehlermeldung hast weiß ich momentan auch nicht. Ich habe keine.

Der Ausdruck ist der Standard Konstruktor. Den kannst Du auch erstmal weglassen, wird implizit angenommen. Lernst Du dann warscheinlich später mal :smile:

Und wieso muss vor den get Methoden immer ein public stehen obwohl oben ein private steht?

private bedeutet das die Variable nur innerhalb der Klasse benutzt werden darf. Möchte eine andere Klasse von Außen auf die Variablen zugreifen, brauchst Du ebend get- und set-Methoden. Get zum Lesen, Set zum schreiben. Das entspricht der Java Coding Convention ist „guter Style“. Das Selbe würdest Du erreichen wenn Du die Variablen statt private einfach public deklarieren würdest. Dann könntest Du direkt drauf zugreifen. Macht man aber nicht. beispiel

public String bla = Hello World;

in Klasse Buch. Dann könntest Du folgendes machen:

System.out.println(Buch.bla);

und

Buch.bla = Selber Hallo;

Mit get und set:

Buch buch = new Buch();
System.out.println(buch.getBla());
buch.setBla(„Selber Hallo“);

So und um Deine Frage zu beantworten: Würden die get- und set-Methoden auch private sein, dann könnten andere Klassen sie nicht benutzen und sie wären sinnlos.

Gut, das hab ich jetzt verstanden.
wenn ich jetzt bloß noch wüsste, wie ich den Fehler entfernen kann…

Hi!

Die Anweisungen der get-Methoden müssen innerhalb von geschweiften Klammern stehen.
Also z.B.:

String getGenre()
{
return genre;
}

Außerdem bietet es sich immer an, zu definieren, ob die Methode public, protected oder private ist.

Also dann:

public String getGenre()
{
return genre;
}

Da hab ich leider auch keine Antwort drauf.

Okay hab ich soweit, bloß bekomme ich oben bei der Deklaration bei dem String noch folgende Fehlermeldung ‚illegal start of expression‘ und ich weiß nicht wieso

public class Main {

public static void main (String[] args) {

private String autor, titel, genre;
private int lfdNr;

public Main() {
super();
}

public String getAutor() {
return autor;
}

public String getTitle() {
return titel;
}

public String getGenre() {
return genre;
}

public int getldfNr() {
return lfdNr;
}
}

Okay, ich hab mir mal die Aufgabenstellung bei Dir genauer angeschaut. Da steht „schreiben Sie eine Klasse Buch“ - Du hast bisher eine Klasse Main.

Bei Dir muß es also losgehen mit

public class Buch
{

}

Dann kommen die Attribute und die get-Methoden - insgesamt sieht das dann so aus:

public class Buch
{
private String autor, titel, genre;
private int lfdNr;

public String getAutor()
{
return autor;
}

public String getTitle()
{
return titel;
}

public String getGenre()
{
return genre;
}

public int getldfNr()
{
return lfdNr;
}

}

und immer schön aufpassen, daß alle Klammern, die Du aufmachst, auch wieder geschlossen werden.

Die Klasse Buch kann man jetzt natürlich nicht allein ausführen (wie zb das bekannte „hello world“-Beispiel) - sie kann nur von anderen Klassen und Methoden verwendet werden.

Also eine Klasse ist normalerweise so aufgebaut:
public class KLASSE
{
//Variablen z.B.
private String autor;
private int lfdNr;

//dann Konstruktor
public KLASSE(){
//beim Klassenaufruf wird das gemacht
}

//die Methoden
}

wenn du void verwendet wird kein Rückgabewert erwartet
also dann kein return
dann meinst du vermutlich „String autor=getAutor();“

Bei dem private String autor, titel, genre; bekomme ich aber immer noch die Fehlermeldung ‚illegal start of expression‘

Hab den Fehler gefunden, musste die main methode entfernen :smile:

Ja ich habe das Programm jetzt folgendermaßen:

public class buch {

private String autor, titel, genre;
private int lfdNr;

public buch() {
super();
}

public String getAutor() {
return autor;
}

public String getTitle() {
return titel;
}

public String getGenre() {
return genre;
}

public int getldfNr() {
return lfdNr;
}
}

bloß wofür steht das super(); ?

Hi versuchs mal so:

public class Buch {

private String autor, titel, genre;
private int lfdNr;

public static void main(String[] args) {
// TODO Auto-generated method stub

}

public String getAutor(){

return autor;
}

String getTitel(){
return titel;
}
String getGenre(){
return genre;
}
int getLfdNr(){
return lfdNr;
}

}

Und nun zum Thema:
Also Deine Fehler sind folgende:

Du hast versucht die get-Methoden in die Main Methode also die statische zu schreiben, was so nicht wirklich geht.
Der zweite Fehler ist wieder ein syntax Fehler: Es fehlen die Klammern der einzelnen get-Methoden (siehe oben)
Zum Schluss: Die Klasse
public static void main(String[] args) {
// TODO Auto-generated method stub

}
Brauchst Du nicht, da diese nur für den Programmstart benutzt wird. Würd gerne mehr schreiben, bin aber gerade auf dem Sprung. Wenn Du noch fragen hast… Die Antwort könnte aber ne Weile dauern

Habe soweit alles verstanden. vielen Dank :smile:

Ja die Aufgabe hab ich jetzt soweit richtig.
jetzt muss ich noch folgendes machen:

Überschreiben Sie den Standardkonstruktor der Klasse Buch. Der „neue“
Konstruktor bekommt die Attribute der Klasse als Parameter übergeben. Die
Initialisierung der Attribute erfolgt innerhalb des Konstruktors.

Hab ich das soweit richtig gemacht?

public class buch {

private String autor, titel, genre;
private int lfdNr;

public buch(String autor, String titel, String genre) {
super();
}

public String getAutor() {
return autor;
}

public String getTitel() {
return titel;
}

public String getGenre() {
return genre;
}

public int getldfNr() {
return lfdNr;
}
}

Hallo,

beachte die Aufgabenstellung. Du sollst eine Klasse Buch schreiben, keine Methode. Du hast aber alles in die main-Methode geschrieben, welche nicht der richtige Ort ist.

Konnte ich dir damit weiterhelfen? Ich will ja nicht alles verraten :smile:

Beste Grüße, Sascha

Ja die Aufgabe hab ich jetzt soweit richtig.
jetzt muss ich noch folgendes machen:

Überschreiben Sie den Standardkonstruktor der Klasse Buch. Der „neue“
Konstruktor bekommt die Attribute der Klasse als Parameter übergeben. Die
Initialisierung der Attribute erfolgt innerhalb des Konstruktors.

Hab ich das soweit richtig gemacht?

public class buch {

private String autor, titel, genre;
private int lfdNr;

public buch(String autor, String titel, String genre) {
super();
}

public String getAutor() {
return autor;
}

public String getTitel() {
return titel;
}

public String getGenre() {
return genre;
}

public int getldfNr() {
return lfdNr;
}
}