Konstruktoren (Verständnisproblem)

Status
Nicht offen für weitere Antworten.
T

Trucka

Gast
Hallo Welt!

Ich habe letztens eine Informatik-Klausur geschrieben und es ist meines erachtens alles gut gelaufen. Jedoch sah der Lehrer das anders und hat mir bei einer Aufgabe mit Konstruktoren Punkte abgezogen, weil ich angeblich die Aufgabe nicht richtig verstanden hätte. Jetzt würde ich gerne von euch sehen, wie ihr das Programm zu der Aufgabe programmiert hättet. Damit ihr nicht voreingenommen seid, werde ich meine Lösung erst später posten.

Aufgabe 1:
Schreiben Sie eine Klasse Schiff, mit folgenden Eigenschaften:
Instanzvariablen: knoten (double), mitMotor (boolean)
Instanzmethode: fahren, Inhalt: Stringausgabe: z.B.: "Das Schiff faehrt vorwaerts!"
Klassenvariablen: anzahl (zählt alle Schiffobjekte)
Klassenmethode: moreSchiffe (Zählt die Anzahl der Schiffe jeweils um eins hoch)

Aufgabe 2:
Erzeuge Sie folgende Konstruktoren für die Klasse Schiff:

Konstruktor 1: ohne Parameter
Konstruktor 2: Übergabe des Herstellernamens als String
Konstruktor 3: Übergabe des Herstellernamens als String und PS-Zahl als Integer

Bei jedem neuen Schiffobjekt soll die Klassenvariable anzahl durch die Konstruktoren erhöht werden.


Schonmal vielen Dank für euere Antworten
 
M

maki

Gast
Damit ihr nicht voreingenommen seid, werde ich meine Lösung erst später posten.
Kann ich nicht nachvollziehen, da die Lösung wirklich schon eindeutig in der Aufgabenstellung steht.

Würde sagen, dass einer von euch beiden (du oder dein Lehrer) die Aufgabe missverstanden haben.
 

Niki

Top Contributor
Code:
public class Schiff{
  private double knoten = 0.0;
  private boolean mitMotor = false;

  private String hersteller = null;

  private int ps = 0;

  private static int anzahl = 0;

  public Schiff(){
    this(null);
  }

  public Schiff(String hersteller){
    this(hersteller, 0);
  }

  public Schiff(String hersteller, int ps){
    this.hersteller = hersteller;
    this.ps = ps;

    anzahl++;
  }

  public boolean isMitMotor(){
    return mitMotor;
  }

  public void setMitMotor(boolean b){
    mitMotor = b;
  }

  public void setKnoten(double d){
    knoten = d;
  }

  public boolean getKnoten(){
    return knoten;
  }

  public void fahren(){
    System.out.println("Das Schiff fährt vorwärts");
  }
}
 

ARadauer

Top Contributor
Code:
public static void moreSchiffe(){
	Schiff.anzahl++;
}

public static int anzahl(){
	return Schiff.anzahl;
}
dann wären wir komplett, vermut ich mal.

wobei ich insgeheim glaube, dass wir gerade eine hausübung gelöst haben ;-)
 
M

maki

Gast
Sollte moreSchiffe nicht private oder zumindest protected sein?

Schliesslich wird es doch nur vom Konstruktor aufgerufen.
 
T

Trucka

Gast
danke für eure antworten und NEIN es hat niemand meine hausübungen gelöst meine lösung war/ist

Code:
public class Schiff {
	double Knoten;
	boolean mitMotor;
	static int anzahl = 0;
	
	public Schiff() {
		anzahl++;
	}
	public Schiff(String hersteller) {
		anzahl++;
	}
	public Schiff(String hersteller, int ps) {
		anzahl++;
	}
	public void fahren() {
		System.out.println("Das Schiff faehrt vorwaerts");
	}
	public static void moreSchiff() {
		anzahl++;
	}
}

Das Problem bestand nämlich darin, dass in der zweiten Aufgabe stand, dass z.B. der hersteller als String übergeben werden soll. Jedoch stand da für mich nicht drin, dass ich dann den herstelllernamen auch an das Objekt übergeben soll. Aber anscheinend liege ich mit dieser Ansicht falsch, denn Wildcard hat es ja automatisch so gemacht.
Trotzdem wäre es nett, wenn ihr noch eure Meinungen dazu abgebt.
Danke
 
M

maki

Gast
Solltest die konstruktoren Kaskadieren, wie im Beispiel von niki, somit hast du nur eine Baustelle an der die anzahl hochgezählt wird, und zwar wie gefordert über die Methode moreSchiffe() und nicht direkt mit anzahl++.
 
S

SlaterB

Gast
aha, dem Konstruktor einen String übergeben, der dort nicht genutzt und auch nicht abgespeichert wird..

sowas macht nirgendwo auf dieser Welt Sinn, weder in Programmiersprachen noch irgendwo anders
(einen Koffer in den Kofferraum des Autos legen, der dort dann nicht drinbleibt)
das kannst du dir ein für allemal merken, das hat nichts mit dem Verstehen von Aufgabenstellungen zu tun ;)
 
T

Trucka

Gast
Über Sinn lässt sich immer Streiten, für mich macht es nämlich auch keinen Sinn eine Informatik-Klausur, wo programmiert wird, aufm Zettel zu schreiben :wink:
 
S

SlaterB

Gast
wenn du den Unterschied zwischen diesen beiden Sinns nicht siehst, dann gut Nacht
 
T

tuxedo

Gast
Wer auf dem "Zettel" fehlerfrei programmieren kann, kann wie ein compiler denken ;-)

Von daher ist die Übung gar nicht so verkehrt (auch wenn ich sie selbst gehasst habe). Und in diesem Fall, bzw. dieser Aufgabenstelung, war's ja nun wirklich nicht schwer.

btw: *slaterb zustimm*

- Alex
 

Janus

Bekanntes Mitglied
Niki hat gesagt.:
Code:
public class Schiff{

  public Schiff(){
    //this(null);
    this(null, 0);
  }

  public Schiff(String hersteller){
    this(hersteller, 0);
  }

  public Schiff(String hersteller, int ps)
  // ...
konstruktorkaskadierung mit mehr als einem schritt sollte man vermeiden. besser ist es, sich auf einen hauptkonstruktor zu reduzieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben