neue Objektnamen durchlaufen

Nico1999

Aktives Mitglied
Code Schach wenn der Bauer in eine beliebige Figur umgetauscht werden kann hier nur Läufer
Java:
public class Bauerb(){
    private int x;//position auf spielfeld
    private int y;
    
    // konstruktor getter und setter sind vorhanden


    public int BauererreichtandereSeite (this.x){
        if (this.x==0){
            System.out.print("zu welcher Figur soll der Bauer werden");
            int a=sc.nextInt();
            if (a==-2){//wird zu Läufer
                Läuferb läuferb3=new Läuferb(this.x, this.y, -2)
            }
        }
    }
    }
Wie kann ich es erreichen, dass ich immer ein neues objekt erstelle also läuferb3 auf läuferb4, wenn ein anderer bauer auch die andere seite erreicht
Kann ich da jetzt irgenteine Variable bestimmen die ich dann bei i=3 und nach der anweisung i++; so das dann das nächste mal läuferb4 rauskommt.
 

Marinek

Bekanntes Mitglied
Nein, das geht so nicht.
Du müsstest ja schon ein Array aus Figuren irgendwo haben. Wie Referenzierst du sonst Bauerb?

Da müsstest du noch mehr Quellcode posten, um genauer zu helfen.

Eine Figur sollte auch nicht den tatsächlichen Wechsel durchführen. In deinem Fall müsste es das Board machen, wenn eine Figur, die tauschbar ist, die letzte Reihe betritt.

Bitte beachte ebenfalls die folgenden Hinweise:

1. public int BauererreichtandereSeite (this.x){ // Das ist so nicht kompilierbar. Das this.x muss hier weg.
2. Wofür steht das "b" in der Klasse? Ohne Kontext würde ich sagen das ist "falsch".
 

mihe7

Top Contributor
@Apple’s Jünger war schneller, das erspart mir einen Kommentar. Trotzdem noch ein Hinweis: wenn Du auf dem Schachbrett die andere Seite erreichst, dann mutiert der Bauer ja auch nicht plötzlich zu einem Läufer, sondern Du nimmst den Bauern weg und stellst dafür einen Läufer hin.
 

Nico1999

Aktives Mitglied
Nein, das geht so nicht.
Du müsstest ja schon ein Array aus Figuren irgendwo haben. Wie Referenzierst du sonst Bauerb?

Da müsstest du noch mehr Quellcode posten, um genauer zu helfen.

Eine Figur sollte auch nicht den tatsächlichen Wechsel durchführen. In deinem Fall müsste es das Board machen, wenn eine Figur, die tauschbar ist, die letzte Reihe betritt.

Bitte beachte ebenfalls die folgenden Hinweise:

1. public int BauererreichtandereSeite (this.x){ // Das ist so nicht kompilierbar. Das this.x muss hier weg.
2. Wofür steht das "b" in der Klasse? Ohne Kontext würde ich sagen das ist "falsch".
ich habe eine oberklasse Figur kann ich da irgentwie einen array aus denen machen und da auch die unterklassen dann daraus machen
ich werde den code nochmal so umschreiben figur, dass bewegen vom brett ausgeht und nicht von der figur
warum ist this.x nicht kompilierbar verstehe ich nicht
das b steht für schwarz also bauer schwarz
könntest du mir mal zeigen wie man das mit den array aus figuren macht, wenn figur die oberklasse ist und bauer schwarz bsp die unterklasse
und wenn ich alles vom brett ausmache brauche ich dann überhaupt noch eine klasse figur ?
und kann ich da in dem array von figuren dann einfache eine bauern klasse zur damen klasse machen ?
 
Zuletzt bearbeitet:
G

Gelöschtes Mitglied 65838

Gast
Java:
BauererreichtandereSeite (this.x)
Java:
das ist kein übergabe parameter... so schreibt man methoden nicht!
 

mihe7

Top Contributor
ich habe eine oberklasse Figur kann ich da irgentwie einen array aus denen machen und da auch die unterklassen dann daraus machen
Du kannst ein Figur-Array erstellen und dort Objekte ablegen, die eine Instanz der Klasse Figur oder einer ihrer Subklassen ist.

das b steht für schwarz also bauer schwarz
Die Farbe ist lediglich ein Attribut, dafür brauchst Du keine Klasse.

und wenn ich alles vom brett ausmache brauche ich dann überhaupt noch eine klasse figur ?
Ja. Ein Spielbrett hat andere Aufgaben als eine Figur.

Du könntest z. B. sagen, dass eine Figur einen Typ und eine Farbe hat.

Mit aktuellem Java lässt sich z. B. schreiben:
Java:
public record Figur(Typ typ, Farbe farbe) {
    public enum Typ { BAUER, TURM, SPRINGER, LAEUFER, DAME, KOENIG }
    public enum Farbe { SCHWARZ, WEISS }
}
 

KonradN

Super-Moderator
Mitarbeiter
Also erst einmal solltest Du Klassen sauber definieren.

Wenn ich mir das so ansehe, dann sehe ich Autos. Diese haben natürlich ein Attribut Farbe.
Aber es sind alles Autos und nicht AutoBlau, AutoSchwarz und so!

So macht es auch bei Dir Sinn, das Klassendesign zu überdenken. So könntest Du etwas haben wie:
- Klasse Figur, eine Figur hat eine Farbe wobei Farbe ein Enum ist aus WEISS, SCHWARZ
- Eine Figur kann sich bewegen - hier ist die Frage, was Du für ein Interface definierst. Evtl. etwas wie List<Field> getTargetFields().

Das ist dann eine Methode, die evtl. abstrakt ist und dann bei allen Unterklassen geschrieben werden muss. Das ist aber nur eine Option - es kann auch sein, dass man da etwas nutzt wie das Command Pattern, d.h. Figur ist schon eine Endklasse, von der nicht mehr abgeleitet wird und die Figur hat ein Typ (Was wieder ein Enum ist: BAUER, TURM, SPRINGER, ....)

Das Enum selbst kann dann z.B. das jeweilige Verhalten widerspiegeln.

Dein Problem mit dem "Figurentausch" wäre dann auch trivial: Das wäre dann kein Herausnehmen eines Bauern und ersetzen durch einen anderen Bauern sondern wäre dann einfach die Zuweisung eines anderen Typs.

Wichtig aber als erstes - ehe man irgend einen Code schreibt - dass man sich genau überlegt: Was für Klassen gibt es? Welche Attribute brauchen diese? Und das kann dann durchaus im ersten Schritt sein: Es gibt ein Spielbrett mit Figuren und dann irgend eine Aufteilung um Bauern, Springer, ... abzubilden. Ob und wie man da Vererbung anwendet ist da fast nebensächlich.
 

Nico1999

Aktives Mitglied
Mit aktuellem Java lässt sich z. B. schreiben:
Java:
public record Figur(Typ typ, Farbe farbe) {
    public enum Typ { BAUER, TURM, SPRINGER, LAEUFER, DAME, KOENIG }
    public enum Farbe { SCHWARZ, WEISS }
}
Leider weiß ich nicht was record bedeuten soll, die anderen anworten von dir haben mir sehr weiter geholfen
- Eine Figur kann sich bewegen - hier ist die Frage, was Du für ein Interface definierst. Evtl. etwas wie List<Field> getTargetFields().
Wichtig aber als erstes - ehe man irgend einen Code schreibt - dass man sich genau überlegt: Was für Klassen gibt es? Welche Attribute brauchen diese? Und das kann dann durchaus im ersten Schritt sein: Es gibt ein Spielbrett mit Figuren und dann irgend eine Aufteilung um Bauern, Springer, ... abzubilden. Ob und wie man da Vererbung anwendet ist da fast nebensächlich.
danke für deinen Tipp ich werde das ganze jetzt nochmal ganz neu machen könntet ihr vllt nochmal kurz gucken ob mein neuer Ansatz von Figur passt danke schonmal.
[CODE lang="java" title="Figur"]public class Figur {
private enum farbe{schwarz, weiß};
private enum typ{Bauer, König, Dame, Läufer, Turm, Pferd}
private int x;
private int y;
private int wert;
private int graphik;

} // geter seter konstruktor
public boolean legalmove(int schachbrett [][], int eingabe){
// schaue ob move möglich ist
}
public class Schachbrett{
private int[8][8]schachbrett;
//brauch ich hier einen konstruktor? in spielbeginn setzte ich ja quasi das
// spielfeld erst auf
public int[][] figurbewegen(int[][], int eingabe){
// bewege figur
}public int [][] spielbeginn(int[][]){
// mache anfangs aufstellung oder sollte man gleich
}

}public class spieler{
private enum farbe{schwarz, weiß};
public boolean ichbindran(int moveanzahl){
// bestimmme ob ich dran bin
}public boolean gewinner(int[][], int eingabe){
// bestimme ob könig fehlt
}
}[/CODE]
 

KonradN

Super-Moderator
Mitarbeiter
Derzeit hast Du in den Klassen Enum typen definiert: Das hat zum Ergebis, dass die Instanzen kein entsprechendes Attribut hast und zum anderen hast du Zwei Enums: spieler.farbe und Figur.farbe

=> Klassen / Enums starten mit einem großen Buchstaben.
=> Wenn möglich immer alle Klassen / Enum als public innerhalb einer eigenen Datei definieren. Innere Klassen und so nur verwenden, wenn diese explizit nur innerhalb der Klasse verwendet werden sollte und nach außen keine Bedeutung hat. (Also am Anfang am Besten ganz sein lassen.)

Wenn Du das Enum Farbe erstellt hast, dann hast Du in der jeweiligen Klasse ein Attribut wie private Farbe farbe;
 

Nico1999

Aktives Mitglied
Derzeit hast Du in den Klassen Enum typen definiert: Das hat zum Ergebis, dass die Instanzen kein entsprechendes Attribut hast und zum anderen hast du Zwei Enums: spieler.farbe und Figur.farbe

=> Klassen / Enums starten mit einem großen Buchstaben.
=> Wenn möglich immer alle Klassen / Enum als public innerhalb einer eigenen Datei definieren. Innere Klassen und so nur verwenden, wenn diese explizit nur innerhalb der Klasse verwendet werden sollte und nach außen keine Bedeutung hat. (Also am Anfang am Besten ganz sein lassen.)

Wenn Du das Enum Farbe erstellt hast, dann hast Du in der jeweiligen Klasse ein Attribut wie private Farbe farbe;
danke
 

mihe7

Top Contributor
Leider weiß ich nicht was record bedeuten soll, die anderen anworten von dir haben mir sehr weiter geholfen
Ein record ist "syntaktischer Zucker" für eine Klasse, die aus unverändlichen Daten besteht, damit man nicht so viel tippen muss :)

Zum Vergleich: um das gleiche bzw. ein ähnliches Ergebnis wie mit dem record oben zu erreichen, müsstest Du schreiben
Java:
import java.util.Objects;

public class Figur {
    public enum Typ { BAUER, TURM, SPRINGER, LAEUFER, DAME, KOENIG }
    public enum Farbe { SCHWARZ, WEISS }

    private final Typ typ;
    private final Farbe farbe;

    public Figur(Typ typ, Farbe farbe) {
        this.typ = typ;
        this.farbe = farbe;
    }

    public Typ typ() { return typ; }
    public Farbe farbe() { return farbe; }

    public boolean equals(Object obj) {
        if (obj == null || obj == this || !(obj instanceof Figur)) {
            return obj == this;
        }
        Figur andereFigur = (Figur) obj;
        return Objects.equals(typ, andereFigur.typ) && Objects.equals(farbe, andereFigur.farbe);
    }

    public int hashCode() {
         return Objects.hash(typ, farbe);
    }

    public String toString() {
        return "Figur [typ=" + String.valueOf(typ) + ", farbe=" + String.valueOf(farbe) + "]";
    }
}

Nachtrag, nur zur Klarstellung: "unveränderliche Daten" soll heißen, dass es nicht möglich ist, die Attributwerte von Objekten dieser Klasse zu ändern. Wenn die Attribute Objekte referenziert werden, die ihrerseits verändert werden können, ist das natürlich nach wie vor möglich.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Java11+ JavaFX HtmlEditor ContextMenu neue MenuItems hinzufügen Allgemeine Java-Themen 5
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
B Java Mail: Prüfung auf neue Emails Allgemeine Java-Themen 1
ralfb1105 Blöcke aus Datei filtern/suchen und in neue Datei schreiben Allgemeine Java-Themen 10
G Excel Tabelle lesen und in neue Excel Tabelle einfügen Allgemeine Java-Themen 11
E neue Lizenzpflicht Java Allgemeine Java-Themen 10
T ändern neue Java Versionen was an der Programmiersprache? Allgemeine Java-Themen 15
K Mit Button neue Klasse öffnen Allgemeine Java-Themen 9
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
KeVoZ_ Nacheinander folgende Strings in Textdokument auf neue Zeile schreiben Allgemeine Java-Themen 6
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0
K Einfaches Array in 2 neue aufteilen. Allgemeine Java-Themen 2
N Neue Software in Java 7 oder 8? Allgemeine Java-Themen 3
K Neue Elemente in JList einfügen Allgemeine Java-Themen 2
K Methode soll neue Buttons erstellen Allgemeine Java-Themen 5
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
N Datenstrukturen an neue Klasse übergeben Allgemeine Java-Themen 16
M Neue Instanz/Kopie einer unbekannten Klasse Allgemeine Java-Themen 7
F Wie zur Laufzeit ganz neue Objekte erzeugen? Allgemeine Java-Themen 5
J Neue Wörter bilden Allgemeine Java-Themen 10
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
T Log4J: Bei Programmstart immer eine neue LogDatei erzeugen Allgemeine Java-Themen 9
J Text einer .csv Datei einlesen und Zeile in NEUE Zeile hänge Allgemeine Java-Themen 1
B Logs - txt-Datei neue Zeile anfuegen, neue Datei erstellen Allgemeine Java-Themen 6
S Zweidimensionales Array neue Zeile erzeugen Allgemeine Java-Themen 3
P Neue Zeile Plattformunabhängig Allgemeine Java-Themen 3
W Programm prüft auf webserver ob neue version vorhanden? Allgemeine Java-Themen 3
I Neue Klassenbibliothek in Klassenpfad einbinden Allgemeine Java-Themen 3
B Ausgabe auf stdout "löschen" und dafür neue Ausgab Allgemeine Java-Themen 10
M neue Thread in neuem Fenster Allgemeine Java-Themen 3
M neue Textdatei DOS/Unix-Format Allgemeine Java-Themen 11
WMaerz Der neue JDK 6 enthält keine javac.exe, tool.jar usw. Allgemeine Java-Themen 6
J Neue Objekte werden nciht angezeigt Allgemeine Java-Themen 2
T iText + neue Seite Allgemeine Java-Themen 14
A Kann keine neue Klasse erstellen. Allgemeine Java-Themen 3
G Programm erzeugt ständig neue Strings . Allgemeine Java-Themen 2
G Neue Warenwirtschaft aber sehr langsam! Allgemeine Java-Themen 3
M in jar eine neue datei per JarOutputStream hinzufügen Allgemeine Java-Themen 2
B Braucht man die neue VM 1.5 Allgemeine Java-Themen 3
F neue klassen einbinden Allgemeine Java-Themen 3
F Neue Bibliothek dem JDK hinzufügen Allgemeine Java-Themen 5
C String in Objektnamen umwandeln Allgemeine Java-Themen 3
F Registry Ordner durchlaufen Allgemeine Java-Themen 1
P Durchlaufen einer Queue Allgemeine Java-Themen 9
B ArrayRecord durchlaufen Allgemeine Java-Themen 2
S Kombinationsmöglichkeiten durchlaufen Allgemeine Java-Themen 3
E Array durchlaufen Allgemeine Java-Themen 2
S Klassen in einer Schleife durchlaufen Allgemeine Java-Themen 11
F JAXB / Listen durchlaufen Allgemeine Java-Themen 17
G Array rekursiv durchlaufen Allgemeine Java-Themen 2
E Wie Arraylisten auf bestimmte Art durchlaufen? Allgemeine Java-Themen 3
C Geschachtelte For-Schleife: Äußere Schleife wird nur einmal durchlaufen!? Allgemeine Java-Themen 3
Dit_ Sortierte DatenListe am schnellsten durchlaufen Allgemeine Java-Themen 20
G Byte- List mit einem Iterator durchlaufen Allgemeine Java-Themen 5
M Verzeichnis durchlaufen und Dateien umbennen Allgemeine Java-Themen 2
M Enumeration Rückwärs durchlaufen Allgemeine Java-Themen 5
MQue Tidy HTML baum durchlaufen Allgemeine Java-Themen 5
P ArrayList durchlaufen Allgemeine Java-Themen 5
MQue HashMap durchlaufen Allgemeine Java-Themen 2
G Durchlaufen eines Arrays Allgemeine Java-Themen 4
E 20-mal ein programm durchlaufen lassen und Allgemeine Java-Themen 3
E Iterator durchlaufen? Allgemeine Java-Themen 8
B JUnit - Gleichen Test x-mal durchlaufen Allgemeine Java-Themen 2
M Funktion wird nicht durchlaufen. Allgemeine Java-Themen 13
K HashMap durchlaufen mit Iterator Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben