Legen Sie in der main()-Methode ein Feld(Array) an.
Die ersten Elemente sollen wie folgt initialisiert werden:
"AA-Mignon","NiCd", 1.2,2000 fürs erste Feldelement,
"AAA-Micro","NiMH",1.2,950 fürs zweite Feldelement.
Das zweite Feldelement soll außerdem mit der Ausgabemethode ausgegeben werden.
Ich hoffe es kann mir hierbei jemand behilflich sein! Danke!
wie sieht denn deine main() Methode bis jetzt aus?
Falls die Klasse der Elemente auch von dir geschrieben ist, würde ich da wahrscheinlich ein schönes toString() reinbauen und dann zur Ausgabe einfach System.out.println verwenden.
du hast vier spalten , also dein Object array braucht 4 plätze für die Spalten
in den 4 Plätzen fügst du deine Parameter der reihe nach jeweils pro Reihe ein
für den ersten Parameter ein string array (ka wie viel platz du brauchst insgesamt) ein wo du deine AA Mignon usw speicherst
für parameter 2 brauchst du nochmal ein string array für NiCd usw
dann brauchst du noch ein Double Array für 1.2 usw
und dann noch ein Integer array für 2000 usw
dann musst du bei der ausgabe immer die Reihen durchlatschen
es ist ansich ein 2 Dimensionales Array ( Also "Tabelle" mit 4 spalten und halt deinen Reihen ) und in diese fügst du dann ein ... ist wie in excel fast
Also das Array zu schreiben ist an sich nicht das Problem! Ich frage mich nur wie ich diesen mit der Ausgabemethode aus der anderen Klasse wiederum in main ausgeben lassen kann?
Also das Array zu schreiben ist an sich nicht das Problem! Ich frage mich nur wie ich diesen mit der Ausgabemethode aus der anderen Klasse wiederum in main ausgeben lassen kann?
du kannst eine Main Methode nur 1 Einziges mal aufrufen und wenn du da Am Ende bist ist das Programm zuende
was du vllt tun kannst als hinweis
-> du erstellst eine Klasse wo man folgende Sachen als Methoden hat
-> man einfügen kann
-> wo man Löschen kann von dem Array
-> auslesen von dem Array
und dann in der Main erstellst ein Objekt der Klasse und führst die Methoden in der Richtigen Reihenfolge auf
Also ist dies, wie ich vermutet habe, nicht möglich und ich müsste in meiner Klasse Batterie eine weitere öffentliche Variable bzw. hier den Array deklarieren, um dann den Array über die main-Methode ausgeben zu können?
Habe ich das richtig verstanden?
Da würde ich einmal rein grätschen, denn das ist so nicht ganz korrekt.
Die main Methode ist ein Startpunkt für die Programmausführung. Aber darüber hinaus ist es nur eine normale Methode.
Und das Programm läuft so lange, bis auch alle Threads, die nicht als Hintergrund-Thread markiert sind, beendet ist. (Hier fällt mir z.B. die GUI Entwicklung ein. Da ist die main Methode beendet aber der UI Thread und die Applikation läuft weiter.
When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:
The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.
All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.
Also ist dies, wie ich vermutet habe, nicht möglich und ich müsste in meiner Klasse Batterie eine weitere öffentliche Variable bzw. hier den Array deklarieren, um dann den Array über die main-Methode ausgeben zu können?
Habe ich das richtig verstanden?
Das erste ist ja auch richtig. Aber Datentyp kann auch eine konkrete Klasse sein. Und Du hast doch extra eine Klasse Batterie erzeugt. Und Du willst Batterien in dem Array speichern. Also nimmst Du Batterie als Typ. Also z.B. sowas wie: Batterie[] batterien = new Battery[2];
Ok das macht Sinn! Aber so habe ich ja jetzt nur eine Variable die ich im Array bsp. batterien [0] speichern kann, richtig?
und wie greift meine Ausgabemethode dann darauf zurück?
So wie Du doch immer auf Methoden zugreifst. Wenn Du einen String hast: wie greifst Du dann auf eine Methode zu? Also Du hast einen String text und willst das erste Zeichen (charAt Methode) aufrufen:
Java:
String text ="Hallo";// Wie rufe ich auf text nun charAt(0) auf?
Das kannst Du 1:1 auf Deine Batterie übertragen. Du hast statt String eine Batterie. Und Batterie hat eine Methode ausgabe.
Ok das macht Sinn! Aber so habe ich ja jetzt nur eine Variable die ich im Array bsp. batterien [0] speichern kann, richtig?
und wie greift meine Ausgabemethode dann darauf zurück?
naja zugriff auf batteryArray[0] liefert dir (falls nicht null) eine Batterie und dann kannst du die von mir genannten Mehtoden ( die du noch bauen musst ) nutzen zb du fügst die
print() methode ein bei deiner Batterie ein
diese Methode hat dann zb diese Zeile an Code
du hast diese Public gemacht
und hast die Getter und Setter Methoden
dh du kannst deine Attribute private machen weil du eh deine Getter und Setter hast
( ist nur um dich wo hin zu schmeißen wo du noch nicht drüber gedacht hast um etwas zu lernen .. Zwang ist nicht da)
Der Aufruf von toString() ist dabei auch nicht einmal notwendig. println nimmt auch ein Object und ruft darauf dann ein toString() auf (Über den Umweg String.valueOf).
Edit: Es reicht also einfach ein: System.out.println(arrayBatterie[1]);
Der Aufruf von toString() ist dabei auch nicht einmal notwendig. println nimmt auch ein Object und ruft darauf dann ein toString() auf (Über den Umweg String.valueOf).
ich persönlich finde toString() überschreibne eher verwirrend... es war für mich immer "printl mal die Referenz aus" ( bzw wert bie Simplen datentypen) ... keine ahnung ob das so normal ist dass man da immer die tostring überschreibt
//Erzeuge Array vom Typ BatterieBatterie[] arrayBatterie =newBatterie[2];//Erzeuge zwei ObjekteBatterie aaMignon =newBatterie("AA-Mignon","NiCd",1.2,2000);Batterie aaaMicro =newBatterie("AAA-Micro","NiMH",1.2,950);//Weise Objekte dem Array zu
arrayBatterie[0]= aaMignon;
arrayBatterie[1]= aaaMicro;
ich persönlich finde toString() überschreibne eher verwirrend... es war für mich immer "printl mal die Referenz aus" ( bzw wert bie Simplen datentypen) ... keine ahnung ob das so normal ist dass man da immer die tostring überschreibt
Mir wurde in meiner Uni beigebracht, dass toString() zu überschreiben "schöner" ist. Aber solange der Methodenname klar und deutlich ist, erfüllt es seinen Zweck
Mir wurde in meiner Uni beigebracht, dass toString() zu überschreiben "schöner" ist. Aber solange der Methodenname klar und deutlich ist, erfüllt es seinen Zweck
Mir wurde in meiner Uni beigebracht, dass toString() zu überschreiben "schöner" ist. Aber solange der Methodenname klar und deutlich ist, erfüllt es seinen Zweck
toString() zu überschreiben ist in meinen Augen gut fürs Logging / Tracing. Ich würde es aber nicht verwenden, um eine Darstellung nach aussen zu dem Kunden zu erstellen.
Als Entwickler entwickle ich z.B. jetzt eine Batterie mit Eigenschaften / einem Verhalten. Wie diese später dargestellt wird, ist für mich an der Stelle erst einmal uninteressant. Die Klasse Batterie ist unabhängig davon, wie diese im Detail angezeigt wird. Das kann in Textform sein, aber evtl. ja auch eine grafische Darstellung. Oder womöglich mehrere mögliche Darstellungen.
Das wird auch bei den üblichen Pattern deutlich: Da wird dann z.B. zwischen Model, View und Controller (MVC Pattern) unterschieden. Batterie wäre Model. Wie das später in der View dargestellt wird, ist für das Model uninteressant. Das kann man auch exemplarisch an der Darstellung einer Zahl deutlich machen:
Da ist dann die Zahl 2000 gespeichert. Aber wie die dann in der Applikation dargestellt wird, kann sich ja verändern. Evtl. will es jemand mit Tausender-Punkt darstellen: "2.000". Oder vielleicht will es jemand mit Exponent, dann wäre es "2E3" oder oder oder ...
Man sollte immer toString() überschreiben, so dass man eine sinnvolle (menschenlesbare) Repräsentation der Instanz erhält, aber, wie @kneitzel schon geschrieben hat, wird diese in erster Linie für Loggingzwecke verwendet.
Die gewünschte Ausgabe für den Benutzer der Software kann sich ja, je nach Kontext, ändern, so hast du in einem Fall vielleicht nur eine Liste mit den verfügbaren Batterien, für die du nur den Namen anzeigen willst. Und bei Auswahl einer Batterie, werden auch noch die Details angezeigt. Das lässt sich mit toString() nicht sinnvoll lösen, weshalb man dafür die Getter verwendet.