März 01 class Vektor und noch was

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

März 01 class Vektor und noch was
In Aufgabe 9b) soll man eine statische Methode

add(Vektor a, Vektor b)

implementieren zu einer schon gegebenen Klasse Vektor.
In der Klasse Vektor ist das Feld private Komponenten[ ] deklariert.
Darf ich bei add() denn dann einfach zB: a.komponenten[j] schreiben?
Die Definition von “private” besagt, dass alles was so deklariert ist nur innerhalb der eigenen Klasse sichtbar ist, aber wie sieht dass denn in dem Fall aus?
Add() ist ja Methode von Vektor, aber a&b sind ja jeweils eigene Objekte. Wer hat da noch Durchblick (Bzw wer versteht überhaupt meine wirre Frage :wink: ) ?



Also ich versteh deine wirre frage nicht, aber ich glaube du musst da überhaupt nicht auf das private Array zugreifen, einfach ein neues mit entspr. Länge erstellen, und a[i] + b[i] da rein schreiben und das dann ausgeben. Oder du veränderst a und machst a[i] += b[i] oder so.

Du brauchst dein Array der Instanz in dem fall (glaube ich) gar nicht.

Und des nut a.komponenten[i] geht nicht. Nur wenn du z.B. eine Methode der Klasse schreibst kannst du mit komponenten[i]  zugreifen.

Sorry wegen code, aber das eckige-Klammer-auf-irgendwas-eckige-Klammer-zu funzt net


Ich würde darauf tippen, dass es so nicht funktioniert.
Wie du schon geschrieben hast, sind a und b eigene Objekte und die statische Methode hat mit denen nichts am Hut, ausser das sie von der gleichen Klasse ist. (und statisch ist, aber dafür kann die Methode ja nichts :-D)

Ich habe es so gelöst, dass ich mir erstmal die Methoden getKomponente und length geschrieben habe. (length spart bei den weiteren Fragen viel Zeit)
Danach flutschte die Aufgabe :slight_smile:


@Frank
Ich denke auch, dass man extra Mathoden getKomponente() und length braucht, aber ich war halt nicht sicher, weil das ist ja schon irgendwie so ein Grenzfall und arg viel Platz ist unter der Aufgabe auch nicht, aber im Ernstfall ist so eine Hilfsmethode ja schnell hingeklatscht.

@Stricher
a[j] + b[j] geht glaub ich auf garkeinen Fall, schau dir mal an, wie die Klasse Vektor aufgebaut ist. Ich will ja keine Arrays addieren, sondern spezielle Vektoren.
Und wenn du a[ j ] schreibst gehts auch ohne Code nur bei “i” glaubt das Forum jetzt kommt was kursives


Klein Peters Klasse Tausch aus Aufgabe 10 hat doch bestimmt nen Haken, nur leider find ich den nicht. Wer checkt was der kleine Peta falsch gemacht hat?


Hast du irgendwas konsumiert? :cool:
Oder es ist das viele Denken was unsere Hirne zerstört… :wand:
ich habe jedenfalls nicht den Schimmer einer Ahnung worum es geht. :moody: :moody: :moody:


weiss nimmer genau. aber da ging es doch um eine vertausch-methode, oder?
dasproblem an der sache ist das die funktion mit kopien der eigentlichen werte rechnen (stichwocht: gültigkeitsbereich von variablen). es werden die übergebenen variablen a und b also nicht vertauscht.


Zu private:

Auf alle private-Member kann innerhalb der eigenen Klasse zugegriffen werden. Welche Instanz dabei verwendet wird, ist egal.


ah, schön. entspricht das in c++ nicht sowas wie protected? ich hab das jetzt nicht mehr so ganz imkopf, hab’s nie richtig gebraucht.

und zu peter’s klasse oben: da ging es um call by value/call by reference. da die parameter by value und nicht by reference übergeben werden, funzt des ding nicht. sonst würde es schon gehen. (so war das glaub ich…)
aber da wir sowas nicht hatten, ist die aufgabe irrelevant :slight_smile:


Okay, also klein-pjotrs swap-algo kann mir egal sein, aber das andere hab ich noch nicht gecheckt. Hab ich dich jetzt richtig verstanden Krull und ich kann a.komponenten[j] schreiben, oder muss ich eine Methode getKomponente(int i) schreiben?


also protected gibt’s auch noch - dann kann die Klasse und alle SubKlassen von ihr drauf zugreifen


Heißt das jetzt also, dass sowas ginge:

class A
{
	private int i;

	public void method()
	{
		A a = new A();
		a.i = 5;   // das i ist ja eigentlich private
	}
}

nein, das duerfte nicht gehen.
dein klein-a ist ja eine neue instanz innerhalb deiner methode und von aussen kannst du dann nicht auf dein i zugreifen.
du koenntest auf das i der klasse, in der du dich befindest (in diesem fall auch A) zugreifen, der uebersichtlichkeit halber z. b. ueber this.i = 5.


wenns protected wäre ginge das…


nein, ginge auch nicht, weil hier nirgendwo eine klasse abgeleitet wird. du greifst in jedem fall von “aussen” auf die variable zu, da hilft protected auch nicht.


Doch, das geht. Der Grund ist, daß die Methode „method“ zur Klasse A gehört. Zu welcher Instanz die Daten gehören ist dabei irrelevant.

Auch bei protected-Deklarationen verhält sich Java deutlich anders als beispielsweise C++. Es ist in Java durchaus möglich auf protected-Elemente auch außerhalb der Vererbungshierarchie zuzugreifen, solange man sich im gleichen Paket befindet.

Der folgende Code ist lauffähig, wenn die Klassen A und B im gleichen File deklariert werden:

class A
{
	private int i;

	public void method()
	{
		B b = new B();
		b.j = 5;   // das j ist ja eigentlich protected
	}
}

class B
{
	protected int j;
}

jetzt wird’s aber konfus: seit wann dürfen denn mehrere klassen in einer java-datei liegen??

am besten wird’s sein, ich nehm mir jetzt mal nen java- und c+±compiler und probier das ganze einfach mal aus…


Also auf dem 4, Übungsblatt ist ja genau die Vektor Aufgabe aus der Klausur, und anscheinend geht genau das.
(Also class Vektor mit private komponenten[ ] und darin eine Methode add(Vektor a, Vektor b) mit a.komponenten und b.komponenten)

Und wieder was gelernt… :cheesy:


Stimmt. Deshalb bin ich auch kein Java-Fan.