Wie kann ich ein String aus einer anderer Klasse in JOptionPane ausgeben?

hudson28

Grünschnabel
Ich muss das bekannte Hasen und Hühner programmieren und eigentlich wäre ich schon fertig, aber ich kann den String, in dem steht, wie viele Hasen und Hühner es sind, nicht ausgeben. Ich muss es in einem JOptionPane ausgeben, doch der String ist in einer anderen Klasse.
Unbenannt.PNG
Hier ist mein String in der Klasse "Tierzaehler"
2.PNG
und hier ist meine JOptionPane in der Klasse TierzaehlerGUI und ich habe schon vieles ausprobeirt, aber irgendwie wird mir "ausgabe" immer rot unterstrichen. Hier sieht man meinen letzten Versuch.

Meine Frage ist also, wie kann ich "ausgabe" in dieser JOptionPane ausgeben?

(und ja ich weiss, dort steht noch Warnung anstatt Information)
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    5,6 KB · Aufrufe: 2

zerix

Hausmeister
Moderator
Hallo,

ich vermute mal, dass die Klasse Tierzaehler die Variablen anzHuehner und anzHasen beinhaltet und die oben abgebildete toString-Methode beinhaltet.

Versuch es mal einfach mit dem Aufruf Tierzaehler.toString().

Die Variable ausgabe existiert bei dir nur in der Methode toString und kannst du nicht außerhalb benutzten, da du sie in der toString-Methode anlegst.

Als Tipp, wenn du Code posten möchtest, musst du keinen Screenshot machen, sondern kannst den einfach hier einfügen. Dazu gibt es oben in der Toolbar einen Menü "Einfügen" und dort kannst du Code auswählen. Dann wird der Code auch mit Syntax-Highlighting im Post angezeigt und Personen, die dir helfen wollen, können ihn kopieren ohne ihn abtippen zu müssen.


Viele Grüße
Sascha
 

hudson28

Grünschnabel
Ja, mit Ihren Vermutungen lagen Sie richtig. Wenn ich jedoch Tierzaehler.toString() einfüge, wird leider die ganze JOptionPane unterstrichen, wenn ich es dann richtig verstanden habe.

Und vielen Dank :) Diese Webseite ist für mich allgemein ein bisschen unübersichtlich, daher freue ich mich um solche Tipps.

Java:
JOptionPane.showMessageDialog(null, Tierzaehler.toString() , "Warnung!", JOptionPane.WARNING_MESSAGE)
 

zerix

Hausmeister
Moderator
Da ich den ganzen Code nicht sehe, kann ich nicht sagen, was das Problem ist.

Was sagt denn die IDE dazu? Wenn etwas rot unterstrichen wird, wird ja auch eine Fehlermeldung angezeigt.

Viele Grüße
Sascha
 

hudson28

Grünschnabel
Bei der IDE steht "non-static method toString() cannot be referenced from a static context".
Falls es Ihnen weiterhilft sind hier (denke ich zumindest) die wichtigsten Programmteile zu sehen:
Im Starter:
Java:
    public static void main(String[] args) {
        final TierzaehlerGUI gui = new TierzaehlerGUI();
        gui.zaehleTiere();
    }

In der Klasse TierzaehlerGUI:

Java:
public class TierzaehlerGUI {

    public void zaehleTiere(){
// eigentlich gäbe es hier noch zwei JOptionPane, welche die Anzahl Beine und Tiere erfragen

        JOptionPane.showMessageDialog(null, Tierzaehler.toString() , "Warnung!", JOptionPane.WARNING_MESSAGE);
 
    }

}

Und noch zuletzt in der Klasse Tierzaehler:
Code:
    @Override
    public String toString(){
        String ausgabe;
        ausgabe = "Anzahl Huehner: " + anzHuehner + "\nAnzahl Hasen: " + anzHasen;
        return ausgabe;
    }
 

zerix

Hausmeister
Moderator
Ach, das ist ja richtig. Die toString-Methode muss auf ein Object der Klasse aufgerufen werden.

Existiert irgendwo was in die Richtung:
Tierzaehler tierzaehler = new Tierzaehler

Viele Grüße
Sascha
 

hudson28

Grünschnabel
Nein, gibt es nicht und wenn ich es hinschreibe, kommt auch eine Fehlermeldung, da es einen Konstruktor mit dem Namen Tierzaehler gibt. Es wird "constructor Tierzaehler in class Tierzaehler cannot be applied to given types..."
Hier sind die Klassendiagramme falls dies helfen würde. Unbenannt.PNG
 

zerix

Hausmeister
Moderator
Hallo,

deine TierzaehlerGUI müsste teilweise so aussehen

Java:
public class TierzaehlerGUI{

public void zaehleTiere(){

    int anzahlBeide = <wo auch immer die her kommt>;
    int anzahlTiere = <wo auch immer die her kommt>;
    Tierzaehler zaehler = new Tierzaehler(anzahlBeine, anzahlTiere);

   JOptionPane.showMessageDialog(null, Tierzaehler, "Meldung", JOptionPane.INFORMATION_MESSAGE);
}


}

Natürlich musst du dem Konstruktor die Werte übergeben. Ich denke, dass Sie sich nochmal mit Klassen, Konstruktoren und Object-Erzeugnung auseinandersetzen sollten.

Viele Grüße
Sascha