Beziehungen aus Klassendiagramm abbilden

erenion

Mitglied
Hi,

Also jetzt muss ich ein ganz einfaches Programm schreiben, das kann ich aber leider nicht, und ich brauche dabei eure Hilfe. Ich zeige euch jetzt, was für ein Programm ich schreiben sollte. Es ist vielleicht komisch, dass ich mich seit 2 stunden damit beschäftige, aber konnte es leider nicht schreiben.


Hier ist das Programm.


Erstellen Sie ein Java Programm, welches die Beziehung zwischen Bäumen und Äpfel wie im nachfolgenden Klassendiagramm abbildet. In einer Beispielanwendung soll ein Baum mit 15 und ein zweiter mit 21 Äpfeln angelegt werden. Ernten Sie alle reifen Äpfel.
Hinweise:
Die Methode ernten() pflückt alle reifen Äpfel.
Ist oder wird der Durchmesser eines Apfels größer als 10 cm, kann dieser geerntet werden. Beim Erzeugen der Äpfel, wird eine Zufallszahl zwischen 5 und 15 cm als Durchmesser zugewiesen.

Hier ist das Bild : http://s1.directupload.net/images/131028/zmzk6ef8.jpg


Ich wäre sehr dankbar, wenn Sie mir dabei helfen könnten.

Danke im Voraus
 
Zuletzt bearbeitet von einem Moderator:

erenion

Mitglied
Also ich habe mir viel mühe gegeben aber hab s nicht geschafft , ich kann auch zeigen was ich geschrieben habe aber das macht keinen Sinn , glaube ich. Also was ich brauche ist nicht dass jemand dass Programm schreibt und mir zeigt, ich möchte verstehen wie man es schreibt damit ich Java weiter üben kann. Also ich lerne seit einigen Monaten und ich bin darin sehr schlecht.

Gruß Batu
 

Fab1

Top Contributor
Was verstehst du denn genau nicht. Die Aufgabe ist ganz verständlich gestellt wie ich finde.

Weißt du denn was ein Klassendiagramm ist? Erstelle doch einfach mal die Klassen, wie sie in dem Diagramm abgebildet sind, das lässt sich mit Wikipedia schonmal relativ leicht auch ohne großen Kenntnisse lösen.
 

erenion

Mitglied
Hier ist was ich geschrieben habe, also ich habe nur den ersten Baum erstellt, aber auch damit Probleme gehabt.

Java:
import java.util.Random;

public class RandomInteger {

	static boolean istReif = false;
	static int[] ernteApfelErstesBaums = new int[15];

	static int ersterBaum;
	static int randomInt;
	static int zahl = 0;

	public static void main(String args[]) {

		// note a single Random object is reused here
		Random randomGenerator = new Random();
		for (ersterBaum = 5; ersterBaum <= 20; ++ersterBaum) {

			randomInt = randomGenerator.nextInt(15);
			System.out.println("Erste Apfel wurde von " + randomInt
					+ " grosse erzeugt.");

			if (randomInt > 10) {
				zahl++;
				ernten();
			}

		}

	}

	private static void ernten() {
		ernteApfelErstesBaums[ersterBaum] = randomInt;
		System.out.println( zahl + ". geertnete Apfel "
				+ ernteApfelErstesBaums[ersterBaum]);
	}
}
 

eRaaaa

Top Contributor
Also Java ist eine objektorientierte Sprache, dein Klassendiagramm zeigt zwei Klassen, meinst du nicht dass du evtl. anfangen solltest diese zu erstellen? Das solltet ihr ja anscheinend schon gelernt haben, auch wie man dann davon Objekte erstellt. Dann ist es deine Aufgabe die Beziehung zwischen den beiden Klassen herzustellen.
Fange also an die beiden Klassen zu erstellen mit den im Klassendiagramm gezeigten Methoden und Variablen. Das wäre zunächst ein Anfang.

[OT]Bitte beim nächsten Mal einen aussagekräftigeren Titel wählen, "Ein Anfänger braucht Hilfe" o.ä. sagt nichts über das Thema aus![/OT]
 

erenion

Mitglied
Okay dank alle, also jetzt schaue ich ein paar Videos, um es besser zu lernen, und dann versuchte noch mal, es zu schreiben, und in ein paar stunden melde ich mich wieder bei euch
 

erenion

Mitglied
und es wäre sehr gut, wenn ihr mir ein Video empfehlen könnt, jetzt guck ich im Internet, aber ich hab keine Ahnung welche davon besser ist
 

erenion

Mitglied
Hallo wieder,
Ich versuche es wirklich, aber ich kann es nicht, ich hab die Klassen erstellt, und jetzt kann ich die Beziehungen nicht bauen, also das ist mir sehr wichtig, und brauch jetzt Hilfe, also es wäre perfekt, wenn ich eine Einführung bekomme, und ein bisschen Informationen, was ich tun soll.

vielen Dank im Voraus
 

geqoo

Bekanntes Mitglied
Also, fangen wir mal von vorn an zu überlegen.

Wir brauchen 2 Klassen (es ginge auch mit einer, aber der besseren Anschauung wegen machen wir es mit zweien):
- Baum
- Apfel
Dann brauchen wir 2 Bäume, also 2 Instanzen der Klasse "Baum". Der eine Baum wird also später mit 15 und der andere mit 21 Äpfeln instanziert. Die Klasse Baum bekommt noch folgende Methode:
+ ernten(): void (+ ist bei Klassendiagrammen public, - private)
Nun brauchen wir natürlich noch etwas, um die Äpfel zu speichern, ein privates Attribut (z.B. eine Liste):
- LinkedList<Apfel>

Dann ist da noch die Klasse Apfel, die einen int "durchmesser" bekommt.
- durchmesser: int
Und außerdem wollen wir wissen, ob man ihn ernten kann:
- ernten: boolean
Außerdem brauchen wir noch einen Getter für "ernten".

Ich gebe hier mal die Apfel Klasse vor :)

Java:
import java.util.Random

class Apfel {
  private int durchmesser;
  private boolean ernten;

  public Apfel () {
    Random randomGenerator = new Random();
    this.durchmesser = randomGenerator.nextInt(10) + 5;
    // Mit Hilfe dieses Tricks erzeugen wir eine Zahl zwischen 15-5, also 10 und 0. 
    // Dann wird 5 drauf addiert und wir erhalten einen Bereich von 5 bis 15, statt 0 bis 10.

    if (this.durchmesser >= 10) {
      this.ernten = true;
    } else {
      this.ernten = false;
    }
  }

  public boolean getErnten() {
    return ernten;
  }
}
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Ich gebe hier mal die Apfel Klasse vor :)

Sei mir nicht böse, aber die Klasse sollte der TO besser nicht verwenden, denn du hältst dich nicht an das Klassendiagramm und ich würde die Entscheidung ob der Apfel nun reif ist oder nicht nicht im Konstruktor fällen, so etwas macht man eig. nicht - dafür war eig. auch die Methode istReif() gedacht....aber als Beispiel evtl. ok

Die Klasse Baum bekommt noch folgende Methode:
+ ernten(): void (+ ist bei Klassendiagrammen public, - private)

Ähm nein, die Methode hat sehr wohl einen Rückgabewert.
 

geqoo

Bekanntes Mitglied
Oh ja, da steht es. Ich war wohl gestern nicht so ganz bei der Sache ...

Dann könnte ma neinfach getErnten() zu ernten() umbenennen, dann den if-Block nehmen, den dort einfügen und dann einfach statt dem Setzen der Klassenvariable einfach je nach dem, ob man den Apfel ernten kann, ihn zur Liste der zurückgegebenen Äpfel (die nicht reif sind) hinzufügen, oder eben nicht :rtfm:
 
Zuletzt bearbeitet:

Neue Themen


Oben