Klassen Klassen Kommunikation

Darnok

Mitglied
Hallo Liebe Programmierer,

Ich programmiere Gerade ein Sudoku für die Schule und habe eine Klasse Die für das Lesen von Test Daten zuständig ist
Bild_2022-10-18_212634276.png

Hier ein Klassen Diagramm hoffe es hilft. Wie ihr seht habe ich schon selbst eine weitere Verbindung hinzugefügt da ich nicht wusste wie ich sonst auf Button druck die Funktion leseDaten() Starte. Sollte es hier bessere Möglichkeiten geben nur her damit ;) .

Jetzt zum eigentlichen Problem ich will nach dem Lesen der Daten (Die in ein 2d Array eingelesen werden also die zahlen) die zahlen auch visuell direkt zeichnen.

Jetzt hatte ich erst gedacht ich mache einfach noch eine Verbindung zurück zur Gui aber damit entsteht ein Stack Overflow da sich die Klassen unendlich gegenseitig erstellen also frage:

Wie kann ich die Funktion zeicheZahlen() in meiner Gui Klasse ansprechen

Tipps allgemein zu Klassen sind auch willkommen

Danke ;)
 

Robert Zenz

Top Contributor
Jetzt zum eigentlichen Problem ich will nach dem Lesen der Daten (Die in ein 2d Array eingelesen werden also die zahlen) die zahlen auch visuell direkt zeichnen.

Jetzt hatte ich erst gedacht ich mache einfach noch eine Verbindung zurück zur Gui aber damit entsteht ein Stack Overflow da sich die Klassen unendlich gegenseitig erstellen also frage:
Du denkst zu abstrakt, es sind zwie Operationen die nacheinander ausgefuehrt werden muessen, und niemand sagt wo dies passieren muss.

Also wenn du in der GUI folgenden Code hast:

Java:
private void onButtonPressed() {
    sudokoReader.leseDaten(ausgeaehlteDatei);
}

Dann kannst du ja einfach direkt folgendes machen:


Java:
private void onButtonPressed() {
    sudokoReader.leseDaten(ausgeaehlteDatei);
    zeichneSpielfeld();
}
 

Darnok

Mitglied
Sorry entweder habe ich mich falsch ausgedrückt oder jetzt etwas falsch verstanden, aber ich denke so einfach ist es leider nicht.

Java:
//Code des Buttons
private void cmdTestActionPerformed(java.awt.event.ActionEvent evt) {                                       
        try {
            c_sodokuSpiel.readData();
            
        } catch (IOException ex) {

        }
    }

Java:
// weiter leitung des prozessen von gui über SudokuSpiel nach Testdaten
public void readData() throws IOException
    {
        c_reader.leseDaten();
    }

hier kommt dann der Befehl in der Klasse Testdatenreader an

Java:
// die Funktion zum lesen der daten
public void leseDaten() throws FileNotFoundException, IOException {
        String dataiName = "SodokoVorlagen\\richtig.txt";
        char[] number = new char[81 * 2];

        System.out.println("create file reader");
        try {
            FileReader bob = new FileReader(dataiName);

            bob.read(number);

            System.out.println("Data in the file: ");
            System.out.println((number));
            int reihe = 0;
            for (int i = 0; i < 81; i++) {
                if (((i) % 9) == 0 && i != 0) {
                    reihe++;
                }
                int zeile = ((i) % 9);

                if (spiel.pruefeZahl(zeile + 1, reihe + 1, number[2 * i])) {
                    System.out.println("" + zeile);
                    System.out.println("" + zeile + reihe + number[2 * i]);
                    spiel.initZahl(zeile + 1, reihe + 1, number[2 * i]);
                    //c_gui.zeichneZahl(zeile, reihe, number[2 * i]);
                    // würde ich gerne machen aber dafür müsste meine klasse die Gui klasse kennen

                }

            }

            bob.close();
        } catch (FileNotFoundException e) {
            System.out.println("" + e);
        } catch (IOException ex) {
            System.out.println("" + ex);
        }
    }

hier noch die Zeichnen funktion in der Gui
Java:
 public void zeichneZahl(int x, int y, int zahl) throws NumberFormatException {
        if (x * y != 0) {
            // Zahl im Kaestchen ausrichten
            int xKoord = breiteFeld * x + breiteFeld / 4;
            int yKoord = breiteFeld * y + (breiteFeld - 4);

            // Feld leeren
            // Zahl schreiben
            if (zahl > 0 && zahl < 10) {
                if (c_sodokuSpiel.setZahlSpiel(x, y, zahl)) {
                    zeichnung.clearRect(breiteFeld * x + 1, breiteFeld * y + 1, breiteFeld - 2, breiteFeld - 2);
                    //c_sodokuSpiel.setZahlSpiel(x, y, zahl); // brauch man glaub net
                    zeichnung.drawString("" + zahl, xKoord, yKoord);

                } else {
                    JOptionPane.showMessageDialog(this, "Die Zahl kannst du hier nicht Setzen!");
                }
            } else {
                JOptionPane.showMessageDialog(this, "Nur Zahlen 1-9 sind erlaubt");
            }
        }
    }

das Problem ist das ich die Zeichen Funktion für jede eingelesene zahl aufrufen will und soweit ich das sehe es auf einigermaßen gescheite weiße nur geht wenn die Klassen sich kennen aber dadurch entsteht der Overflow

Java:
// hier noch aus der Klasse SudokuSpiel die initZahl funktion
public void initZahl(int x, int y, int zahl) {
        sodokuArray[x-1][y-1].initZahl(zahl);
    }
Java:
// aus der Klasse SudokuFeld
public void initZahl(int zahl) {
        this.zahl = zahl;
        this.belegt = true;
    }
bezweifle zwar das die init funktionen relevant sind aber ich schick sie einfach mal mit

Java:
public boolean pruefeZahl(int x, int y, int zahl)
    {
        int xCord,yCord;
        xCord = x-1;
        yCord = y-1;
        
        
        if(sodokuArray[xCord][yCord].getZahl() == zahl) return true;
      
        
        for (int i = 0; i < 9; i++)
        {
            if(sodokuArray[xCord][i].getZahl() == zahl) return false;
            else if(sodokuArray[i][yCord].getZahl() == zahl) return false;
        }
        
        int xBox = 0,yBox = 0;
        
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if(x >= 1+j*3 && x<=3+j*3 && y >= 1+i*3 && y <= 3+i*3)
                {
                    xBox = j;
                    yBox = i;
                    break;
                }
            }
            
        }

hier noch die pruefeZahl funktion aber auch die sollte unwichtig sein

sorry wenn ich wieder irgendwas offensichtliches übersehe
 

Jw456

Top Contributor
dein Daten Array ist doch nur lokal in der Methode leseDaten.
"char[] number = new char[81 * 2];" i

Wie soll da die Gui darauf zugreifen?
 

Robert Zenz

Top Contributor
dein Daten Array ist doch nur lokal in der Methode leseDaten.
"char[] number = new char[81 * 2];" i

Wie soll da die Gui darauf zugreifen?
Auf Zeile 24 in der leseDaten Funktion wird Spiel.initZahl aufgerufen mit der aktuellen Zahl. Ich hoffe mal dass das die Zahl im Spiel selbst setzt...aber ich habe den Code ehrlich gesagt nur ueberflogen weil es mir nur um die Strukturierung ging.
 

Darnok

Mitglied
Und weiter? Du willst dass nicht waehrend dem einlesen, du willst das am Ende machen wenn alles eingelesen ist. Und was genau tut denn zeichenSpielfeld wenn nicht zeichneZahl fuer jede einzelne Zahl aufzurufen?
Zeiche Spielfeld zeichnet die linien etc.

Java:
private void zeichneSpielfeld() {

        for (int i = 0; i < 10; i++) {
            if ((i + 2) % 3 == 0) {
                zeichnung.setStroke(new BasicStroke(2));
            } else {
                zeichnung.setStroke(new BasicStroke(1));
            }

            zeichnung.drawLine(0, breiteFeld * i, breiteSpiel - 1, breiteFeld * i);
            zeichnung.drawLine(breiteFeld * i, 0, breiteFeld * i, hoeheSpiel + 1);

            zeichnung.drawString(String.valueOf(i + 1), breiteFeld / 2 - 2 + breiteFeld * (i + 1), breiteFeld / 2 + 4);
            zeichnung.drawString(String.valueOf(i + 1), breiteFeld / 2 - 2, breiteFeld / 2 + 4 + breiteFeld * (i + 1));
        }
        zeichnung.drawLine(0, breiteSpiel - 1, breiteSpiel - 1, breiteSpiel - 1);
        zeichnung.drawLine(breiteSpiel - 1, 0, breiteSpiel - 1, hoeheSpiel + 1);

    }

Aber danke ich mach mal ne neue Funktion die das Ganze Array durch geht und die zahlen alle neu zeichnet das sollte dann funktionieren
 

Jw456

Top Contributor
Auf Zeile 24 in der leseDaten Funktion wird Spiel.initZahl aufgerufen mit der aktuellen Zahl. Ich hoffe mal dass das die Zahl im Spiel selbst setzt...aber ich habe den Code ehrlich gesagt nur ueberflogen weil es mir nur um die Strukturierung ging.
Ja aber da wirt nur eine Zahl in der Klasse in einer Instanzvariablen gehalten mehr nicht.
Er will bestimmt alle haben zum zeichnen.

Wo kommt den Variable spiel her. Von wlelcher Klasse (Objekt) ist die?

OK es gibt zwei initZahl Methoden.
 
Zuletzt bearbeitet:

Darnok

Mitglied
Ja aber da wirt nur eine Zahl in der Klasse in einer Instanzvariablen gehalten mehr nicht.
Er will bestimmt alle haben zum zeichnen.

Wo kommt den Variable spiel her. Von wlelcher Klasse (Objekt) ist die?

OK es gibt zwei initZahl Methoden.
spiel ist von SudokuSpiel Also der Name der klasse einfach

Zwischenfrage: wie Wandel in ascii code in ints um ? bekomme von meiner get Methode ascii code zurück brauche sie aber zum zeichnen als int
Danke ;)
 

KonradN

Super-Moderator
Mitarbeiter
Zwischenfrage: wie Wandel in ascii code in ints um ? bekomme von meiner get Methode ascii code zurück brauche sie aber zum zeichnen als int
Ascii codes bedeutet doch, dass Du es als char vorliegen hast. Und da kannst Du dann normal rechnen: myChar - '0' würde den "ASCII"-Wert von 0 von dem char Wert abziehen so dass Du den Wert der Ziffer bekommst. (ASCII in Anführungszeichen, denn in dem char hast Du kein ASCII Wert der ja nur 7 oder 8 Bit hätte (je nach Darstellung) sondern ein 16Bit Wert. (Java setzt eine UTF-16 Codierung ein, wobei char nicht zwingend ein gültiges UTF-16 Zeichen enthalten muss ...)
 

Jw456

Top Contributor
//c_gui.zeichneZahl(zeile, reihe, number[2 * i]); // würde ich gerne machen aber dafür müsste meine klasse die Gui klasse kennen
Deine GUI klasse erstellt doch bestimmt ein Objekt dieser Klasse. Dann gebe ihr doch dich selber mit. (This)
Also in der SodukuSpiel hast du eine Instanzvariable der GUI.

Mit der du das zeichnen aufrufen kannst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
G Klassen Kommunikation zw. Klassen Java Basics - Anfänger-Themen 28
G Kommunikation zwischen zwei Klassen Java Basics - Anfänger-Themen 5
M Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
V Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 2
L Kommunikation zwischen mehreren Klassen Java Basics - Anfänger-Themen 2
S Kommunikation zwsichen Klassen. Java Basics - Anfänger-Themen 9
G Nochmal Problem mit Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
G Kommunikation zwischen Klassen, aber bitte MVC Java Basics - Anfänger-Themen 12
M probleme in der kommunikation von klassen Java Basics - Anfänger-Themen 5
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
A Methode, Klassen Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
G Klassen und Objekte Java Basics - Anfänger-Themen 2
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
D Klassen ausgeben Java Basics - Anfänger-Themen 2
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben