Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich wage gerade meine ersten Schritte in IntelliJ und komme insgesamt recht gut zurecht, allerdings verstehe ich einfach nicht (und finde dazu auch kein Video), wie ich Methoden, welche nicht die static main methode sind, ausführen kann?
Java:
package Main.Liste;
public class Liste {
Listenelement anfang;
public static void main (String[] args) {
System.out.println("Starting");
}
Liste () {
anfang = new Abschluss();
}
public void HintenEinfuegen (Datenelement d) {
anfang.HintenEinfuegen(d);
}
public void VorneEinfuegen (Datenelement dNeu) {
Knoten kNeu = new Knoten(dNeu, anfang);
kNeu.nachfolger = anfang;
}
}
An sich funktioniert das Programm nämlich, aber ich weiß nicht wie ich z.B. die Methode "HintenEinfuegen" aufrufen kann?
Tut mir leid ich stehe gerade glaube ich etwas auf dem Schlauch. Wenn ich ein Objekt erzeuge, indem ich es in die static main Methode schreibe, dann wird das ja beim starten vom Programm erzeugt, allerdings bin ich dann ja in diesem Screen. Wie rufe ich von hier aus eine Methode auf?
Jedes Java-Programm startet _immer_ von der public static void main Methode einer Klasse.
Es ist ja dann völlig dir überlassen, was diese main Methode tun soll.
Du kannst innerhalb dieser main Methode ja andere Methoden aufrufen.
Oder anders gesagt: _Alles_, was dein Programm tun soll, muss _irgendwie_ von dieser main-Methode ausgehen.
Aus der Art, wie du deine Frage formulierst, klingt es so, als wolltest du eher eine interaktive REPL (Read-Eval-Print-Loop) haben. Sowas gibt es z.B. mit der JShell.
Jedes Java-Programm startet _immer_ von der public static void main Methode einer Klasse.
Es ist ja dann völlig dir überlassen, was diese main Methode tun soll.
Du kannst innerhalb dieser main Methode ja andere Methoden aufrufen.
Oder anders gesagt: _Alles_, was dein Programm tun soll, muss _irgendwie_ von dieser main-Methode ausgehen.
Aus der Art, wie du deine Frage formulierst, klingt es so, als wolltest du eher eine interaktive REPL (Read-Eval-Print-Loop) haben. Sowas gibt es z.B. mit der JShell.
Ahh okay, also kann ich nicht nachdem ich die Main methode gestartet habe einzelne Methoden aufrufen, sondern muss diese Methoden schon in die Main Methode schreiben um sie aufzurufen
Nein, Datenelement ist nur ein interface, welches von der Klasse Knoten verwaltet wird und die Klasse Knoten extended die abstrakte Klasse Listenelement. Dass ich Klassen in Caps schreibe hatte ich mir eigentlich mal angewöhnt, aber heute hab ich irgendwie aus Faulheit alles klein geschrieben.. war wahrscheinlich ein Fehler :/
Das sollte Okay sein, der anfang der Liste soll zu Beginn auch der Abschluss sein, da die Liste zu Beginn leer sein soll. Ja diese Main Methode ist meine echte.
Dass ich Klassen in Caps schreibe hatte ich mir eigentlich mal angewöhnt, aber heute hab ich irgendwie aus Faulheit alles klein geschrieben.. war wahrscheinlich ein Fehler :/
An sich will ich das schon auf einem professionellerem Level machen, allerdings merke ich auch, dass das nicht gerade leicht ist. BlueJ war halt extrem leicht, man konnte die klassen einzeln erzeugen und dann mit rechtsklick die methoden einzeln aufrufen, aber ich finde die Fehler die man eventuell macht werden bei intelliJ besser dargestellt, da fällt es einem viel leichter die zu lösen
Werde ich machen, muss mich jz leider noch die nächsten Wochen aufs Abi konzentrieren aber danach werde ich mich mal richtig einlesen und das gescheit üben.
Danke für die Hilfe!
Da hätte ich jetzt doch noch eine Frage, welche IDE sollte ich benutzen, wenn ich wie in diesem Fall eine Liste erzeugen will und die Methoden dieser testen will? BlueJ funktioniert zwar, allerdings finde ich die Farbgebung nicht so toll, da gefällt mir die von z.B. IntelliJ bei weitem besser.
Da hätte ich jetzt doch noch eine Frage, welche IDE sollte ich benutzen, wenn ich wie in diesem Fall eine Liste erzeugen will und die Methoden dieser testen will? BlueJ funktioniert zwar, allerdings finde ich die Farbgebung nicht so toll, da gefällt mir die von z.B. IntelliJ bei weitem besser.
Die IDE ist doch nur ein Hilfsmittel zur Programmierung. Es ist egal, welche du verwendest. Du kannst auch einen einfachen Texteditor hernehmen.
Java:
package Main.Liste;
public class Liste {
Listenelement anfang;
public static void main (String[] args) {
System.out.println("Starting");
Liste meineListe = new Liste(); // hier wird eine Liste erzeugt.
meineListe.HintenEinfuegen(...); // und da wird sie verwendet
// .. hier kommt der Rest des Programms, das die Liste verwendet
}
Liste () {
anfang = new Abschluss();
}
public void HintenEinfuegen (Datenelement d) {
anfang.HintenEinfuegen(d);
}
public void VorneEinfuegen (Datenelement dNeu) {
Knoten kNeu = new Knoten(dNeu, anfang);
kNeu.nachfolger = anfang;
}
}
Ein guter Ansatz wäre es eine separate Hauptklasse (mit der main() Methode) zu erstellen und dort die Klasse Liste zu verwenden (wie oben gezeigt). In der Klasse Liste kann dann die main() Methode entfallen. Später werden deine Programme ja noch viel mehr Klassen haben, da ist es sinnvoll, gleich sauber zu trennen.
Ich weiß, aber ich frage deshalb, da mir BlueJ von der Farbgebung nicht allzu gut gefällt, ich aber den Umgang damit sehr gerne mag. Beispielsweise, dass man Methoden direkt nach dem Erstellen eines Objekts aufrufen kann und diese somit einzeln testen kann. Würde dir da eine Alternative einfallen die recht ähnlich zu handhaben ist?
Ich weiß, aber ich frage deshalb, da mir BlueJ von der Farbgebung nicht allzu gut gefällt, ich aber den Umgang damit sehr gerne mag. Beispielsweise, dass man Methoden direkt nach dem Erstellen eines Objekts aufrufen kann und diese somit einzeln testen kann. Würde dir da eine Alternative einfallen die recht ähnlich zu handhaben ist?
Hier mal ein Beispiel, wie ich das meine. In IntelliJ erstellst du dazu zwei Klassen.
Java:
// Hauptklasse
public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
greeter.greet(); // aufrufen (testen) der Methode greet()
}
}
Java:
// Weitere Klasse
public class Greeter {
public void greet() {
System.out.println("Hallo Welt!");
}
}
Gestartet wird immer über die main() Methode der Hauptklasse, egal wie viele weitere Klassen es noch gibt. In der Hauptklasse und mittels der main() Methode, wird alles "zusammen gebaut".
Hier mal ein Beispiel, wie ich das meine. In IntelliJ erstellst du dazu zwei Klassen.
Java:
// Hauptklasse
public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
greeter.greet(); // aufrufen (testen) der Methode greet()
}
}
Java:
// Weitere Klasse
public class Greeter {
public void greet() {
System.out.println("Hallo Welt!");
}
}
Gestartet wird immer über die main() Methode der Hauptklasse, egal wie viele weitere Klassen es noch gibt. In der Hauptklasse und mittels der main() Methode, wird alles "zusammen gebaut".
Okay, also das was BlueJ quasi für mich alles gemacht hat muss ich jetzt selber machen indem ich erstmal (beim Beispiel der Liste) ein Datenelement erstelle und damit dann die Methode aufrufe und zum testen dann am besten noch mir irgendwie den Knoten der jetzt am Anfang der Liste ist returne.
Ist ja recht logisch soweit, mal schauen wo ich demnächst dran hängen bleib😆