Gelöst, weitere Fragen finden sich stets am Ende des Threads, danke für eure Mithilfe!
int MyMethod() {
int a = 2;
int b = 0;
int c = 0; // Angabe eines Standardwertes, da die if-Abfrage nicht immer zutreffen muss
if(a == 2)
{
c = a + b;
}
return c;
}
Vielen Dank!Quote:
Hi.
Ich helfe mal da, wo ich glaube verstanden zu haben, wo dein Problem liegen kann.
Wenn eine Methode etwas zurückgibt (also kein Typ "void" ist), z.B bei "int". Dann muss spätenstens zum Ende der Methode ein Wert mit "return" zurückgegeben werden.
In deinem "if" Beispiel gibst du nur einen Wert zurück, falls diese Abfrage zutrifft. Im anderen Fall (a != 2) hättest du nichts zurückgegeben und das bemängelt der Compiler.
Somit wird zwar die Berechnung nur durchgeführt, falls die if-Abfrage zutrifft, aber das "return" Statement wird immer ausgeführt, auch wenn deine Abfrage nicht zutrifft.
----------
Ganz direkt verstehe ich deine Frage bei der "for" Schleife nicht, aber die Variable "number" sollte eine Zahl sein, die einen Wert besitzt.
Quote:
Ich verstehe daher noch nicht, weshalb die oben gezeigte for-Schleife ungültig ist.
Der Syntax ist korrekt. Eine "Dead Code" Warnung besagt, dass der besagte Code nie ausgeführt wird bzw. keinen Mehrwert für das Programm bietet.Quote:
...
for (int i = 0; i < number; i++)
direkt die Fehlermeldung "Dead Code" beim Inhalt der Schleife. (int number wird der Methode gegeben (?))
Wenn du eine IF-Anweisung benutzt solltest du eigentlich auch keinen return Parameter setzen. Wozu auch?Quote:
...
int a = 2;
int b = 0;
int c;
if ( a == 2)
{
c = a+b;
return c;
}
.. kommt es bei mir zu Fehlermeldungen.
Der Fehlercode besagt, dass die Methode keinen Rückgabewert erhält ( .. weil c eben nur ausgegeben wird, falls a gleich Zwei ist. )
if ( a == 2)
{
c = a+b;
}
Testmethode(){
int a = 2;
int b = 0;
int c;
if ( a == 2){
c = a+b;
}
return c;
}
Du kannst die {} weglassen, wenn du alles in einer Zeile schreibst.Quote:
Des Weiteren bin ich mir nicht sicher, wann ich bei "if", "else if" und "else" die geschweiften Klammern beim Argument (?) weglassen kann, denn gelegentlich funktioniert mein Code auch ohne diese. (Leider habe ich zur Zeit kein Beispiel zur Hand.)
If (a==2) c= a+b;
In dem Fall nicht, aber so kann man die Laufzeit verkürzen bzw. Code der eh keine Bewandnis hat überspringen. Es macht also durchaus Sinn returns an verschiedenen Stellen im Code zu verwenden.Quote:
Wenn du eine IF-Anweisung benutzt solltest du eigentlich auch keinen return Parameter setzen. Wozu auch?
Richtig wäre hier bei dir:
Code:if ( a == 2) { c = a+b; }
Das hat nichts mit der Zeile zu tun. Lediglich die folgende Anweisung nach dem If-Statement wird ausgeführt. Da kannst du noch so viel in eine Zeile schreiben, nach dem ersten Semikolon wird die Verzweigung beendet.Quote:
Du kannst die {} weglassen, wenn du alles in einer Zeile schreibst.
Bspw.
Code:If (a==2) c= a+b;
Car [] cars = new Car();
Ist dir das Prinzip der Objektorientierten Programmierung bekannt? Strings sind genauso Objekte wie Car ein Objekt ist. Warum solltest du also kein Array davon anlegen können?Quote:
Frage #1 :
Was genau beschreibt die oben markierte Codezeile und weshalb ist diese Deklaration korrekt?
Ich verstehe es so, dass ein Array der Klasse Car mit dem Namen cars deklariert wird, jedoch ist es mir nicht ersichtlich, wie man einen Array einer Klasse erzeugen kann. ( Bei Strings verstehe ich es, jedoch ist die syntaktische Deklaration dort für mich auch logischer.)
Das wäre einfach kompletter Schwachsinn. Du kannst nicht ein Array von Cars erstellen und dann sagen, dass dieses Array eine Instanz von Car ist. Denn Array =/= Car. Allerdings kannst du Instanzen zu dem Array hinzufügen, heißt:Quote:
Des Weiteren würde ich den Code verstehen, wenn der Array wie folgt deklariert worden wäre:
Code:Car [] cars = new Car();
Car car = new Car(); cars[0] = car;
Flasche[] kiste = new Flasche[24]
kiste[0] = new Flasche()
Ich schaue mir das gleich nochmal in Ruhe an, auf jeden Fall entsteht eine ArrayIndexOutOfBoundsException dann, wenn du über die Grenzen hinaus gehst. Also eine 25. Flasche aus dem Kasten nehmen willst.Quote:
Frage #2:
Ich verstehe nicht so ganz, wie die "ArrayIndexOutOfBoundsException" zustande kommt, da die Indizes als Parameter gegeben sind und auch die vom Lehrstuhl bereits vorgegebene Klasse "Car" diese Fehlermeldung erhält.
Cinema k = new Cinema(2,3); [..] System.out.println(kasse.reserve(0, 10));
Quote:
Eine noch wichtigere Frage für mich wäre, ob ihr mir ein Buch zum Lernen Java's empfehlen könntet.
Die Folien sowie die Vorlesungen meines Profs empfinde ich nicht als sinnvoll, so dass ich mir bisher immer selber alles mit Hilfe der Aufgaben und des Internets angeeignet habe.
Inzwischen wird mir jedoch alles zu unstrukturiert und ich weiß nie, ob ich etwas wichtiges vergessen habe zu googlen, oder möglicherweise nur die Hälfte der Materie gegoogelt habe o.Ä., vielleicht versteht ihr ja was ich meine :D
Quote:
Ist dir das Prinzip der Objektorientierten Programmierung bekannt? Strings sind genauso Objekte wie Car ein Objekt ist. Warum solltest du also kein Array davon anlegen können?
Das wäre einfach kompletter Schwachsinn. Du kannst nicht ein Array von Cars erstellen und dann sagen, dass dieses Array eine Instanz von Car ist. Denn Array =/= Car. Allerdings kannst du Instanzen zu dem Array hinzufügen, heißt:
Ich bin nicht so der Texter, ich hoffe du verstehst was ich im Folgenden meine:Code:Car car = new Car(); cars[0] = car;
Stell dir ein Array wie eine Kiste Wasser/Bier vor.
Du definierst einen Rahmen mit 24 Flaschen.:
Diese sind aber noch nicht initialisiert also noch nicht geöffnet. Um deine Flaschen zu öffnen musst du diese noch initialisieren.Code:Flasche[] kiste = new Flasche[24]
Code:kiste[0] = new Flasche()
Ich schaue mir das gleich nochmal in Ruhe an, auf jeden Fall entsteht eine ArrayIndexOutOfBoundsException dann, wenn du über die Grenzen hinaus gehst. Also eine 25. Flasche aus dem Kasten nehmen willst.
Array Indizies beginnen bei 0, du hast als Paramter Row und Seat (0 sollte nicht möglich sein), also vermute ich, dass du row und seat um eins verringern musst.
Du erstellst ein Kino mit 2 Sitzreihen mit je 3 Sitzen und versuchst in der Ersten Reihe den 11ten Platz zu reservieren.Code:Cinema k = new Cinema(2,3); [..] System.out.println(kasse.reserve(0, 10));
Ich lege dir dieses Buch ans Herz:
[Only registered and activated users can see links. Click Here To Register...]
Von vorne nach Hinten durcharbeiten und wirklich alles lesen, nichts überspringen. Selbst ein erfahrener Programmierer findet immer etwas neues in dem Buch.
Car car = new Car(); cars[0] = car;
Car[] cars = new Car[10];
Eine sehr schwammige Definition ist mir bekannt. Erst durch deinen Vergleich hat's bei mir Klick gemacht :handsdown:Quote:
Ist dir das Prinzip der Objektorientierten Programmierung bekannt? Strings sind genauso Objekte wie Car ein Objekt ist. Warum solltest du also kein Array davon anlegen können?
Ja, habe meine Wissenlücke erkannt.Quote:
Das wäre einfach kompletter Schwachsinn. Du kannst nicht ein Array von Cars erstellen und dann sagen, dass dieses Array eine Instanz von Car ist. Denn Array =/= Car. Allerdings kannst du Instanzen zu dem Array hinzufügen, heißt:
Code:Car car = new Car(); cars[0] = car;
Danke für das Beispiel, hat mir wirklich sehr geholfen Arrays ein bisschen mehr zu verstehen! :)Quote:
Ich bin nicht so der Texter, ich hoffe du verstehst was ich im Folgenden meine:
Stell dir ein Array wie eine Kiste Wasser/Bier vor.
Du definierst einen Rahmen mit 24 Flaschen.:
Diese sind aber noch nicht initialisiert also noch nicht geöffnet. Um deine Flaschen zu öffnen musst du diese noch initialisieren.Code:Flasche[] kiste = new Flasche[24]
Code:kiste[0] = new Flasche()
Ich hatte den Fehler wenige Minuten vor dem Posten deines Beitrages finden können, mein Edit kam wohl ein wenig zu spät.Quote:
Ich schaue mir das gleich nochmal in Ruhe an, auf jeden Fall entsteht eine ArrayIndexOutOfBoundsException dann, wenn du über die Grenzen hinaus gehst. Also eine 25. Flasche aus dem Kasten nehmen willst.
Array Indizies beginnen bei 0, du hast als Paramter Row und Seat (0 sollte nicht möglich sein), also vermute ich, dass du row und seat um eins verringern musst.
Du erstellst ein Kino mit 2 Sitzreihen mit je 3 Sitzen und versuchst in der Ersten Reihe den 11ten Platz zu reservieren.Code:Cinema k = new Cinema(2,3); [..] System.out.println(kasse.reserve(0, 10));
Danke für den Vorschlag, die Empfehlung zu diesem Buch hatte ich im Netz schon des Öfteren gesehen, so dass ich dieses dann wahrscheinlich auch bestellen werde.Quote:
Ich lege dir dieses Buch ans Herz:
[Only registered and activated users can see links. Click Here To Register...]
Von vorne nach Hinten durcharbeiten und wirklich alles lesen, nichts überspringen. Selbst ein erfahrener Programmierer findet immer etwas neues in dem Buch.
Ich glaube die deutlich relevantere Frage an der Stelle ist: Wo liest du gerne?Quote:
Lohnt es sich deiner Meinung nach die aktuellste Version des Buches zu kaufen, oder reicht für einen Anfänger die kostenlose Online-Version aus?
Vorallem weil die Vorlesung bei dir anscheinend recht chaotisch ist, würde sich ein Buch lohnen. Deine Vorlesung basiert warscheinlich auf irgendeinem Buch, das wäre dann wohl die beste Wahl. Da das dann warscheinlich eine ähnliche Reihenfolge hat wie die Vorlesung.Quote:
Ich glaube die deutlich relevantere Frage an der Stelle ist: Wo liest du gerne?
Also liest du gerne lange Texte am Bildschirm oder bevorzugst du da eine Papier-Version.
Wenn du am Bildschirm keine Problem hast, reicht das Openbook wahrscheinlich aus, es ist inhaltlich vollständig, aber nicht die neuste Auflage, was dir aber ziemlich egal sein sollte.
Wenn du es hingegen als Papier oder z.B. in einer E-Book-Reader Version bevorzugen solltest, ist der Kauf definitiv keine falsche Entscheidung.
Die PDF existiert nicht.Quote:
[Only registered and activated users can see links. Click Here To Register...]
Wo genau ist das Problem? Eine Lösung hast du ja scheinbar schon.Quote:
Nun ja, ich melde mich zurück mit dem nächsten Verständnisproblem:
das Attribut-Array "shapes" in der Klasse GeometricManager soll Objekte der Klassen "Rectangle" und "Circle" speichern, jedoch verstehe ich nun nichtmals, wie das überhaupt funktionieren soll, da ich die Unterklassen "Rectangle" und "Circle" nicht mit der GeometricManager-Klass extenden kann. [/SPOILER]
Das erste Problem liegt in deiner Abbruchbedingung. Da array.length die Dimensionen des Arrays zurück gibt musst du mit Indizies beginnend bei 0 arbeiten. Heißt:Quote:
[Only registered and activated users can see links. Click Here To Register...]
i <= this.shapes.length
Und da ist das zweite Problem: Ein kleines Verständnisproblem.Quote:
Dementsprechend stehe ich bei der Aufgabe 3 auf dem Schlauch, denn die Methoden "totalArea" für die jeweiligen Instanzen können ja nun nicht aufgerufen werden.
this.shapes[i].area()