Vererbung/Interfaces/Generics

Ape50

Mitglied
Hi Leute,

ich hab ein kleines Problem und kann mir selber nicht weiterhelfen...

Ich möchte ein Schachprogramm programmieren und verschiedene KIs schreiben und ausprobieren.
In meiner Organisationsklasse brauche ich also(je nachdem welche Ki ich auswähle) eine Instanz, die unterschiedliche Klassen verwaltet. Meine Idee war das ganze mit ner abstrakten Klasse SchachKi zu regeln und alle KIs von dieser erben zu lassen. Das klappt so allerdings noch nicht. Ich denke ich brauche dazu Generics, da fehlt mir allerdings das Wissen wie ich das umsetzen kann... Kann mir jmd ein Tip geben? Bin für jede Hilfe dankbar...
 
Was klappt daran denn nicht? Hört sich nach einem normalen Strategy-Pattern an.

Zeig am besten mal deinen Code, und was daran nicht wie gewünscht klappt 😉
 
ok, also ich hab meine abstrakte Ki-Klasse:

public abstract class Schachcomputer {}

meine Ki-Klasse wie z.b. die hier:
public class Random extends Schachcomputer{}

und meine Organisationsklasse:
public class Orga {
private Schachputer wcomp;
...
public void setComp() {
this.wcomp=new Random();//und das hier mag er gar nicht...
}
}
 
Ich gehe mal davon aus, dass "Schachputer" ein Tippfehler ist und "Schachcomputer" heißen soll.

Wie sehen deine Konstruktoren in Schachcomputer & Random aus?
 
Der Fehler ist jedenfalls nicht in dem Code, den du gepostet hast.

Kann es sein, dass es für die Klasse "Random" keinen parameterlosen Konstruktor gibt? Was sagt denn die Fehlermeldung?
 
doch, den gibt es...
Type mismatch: cannot convert from Random to Schachcomputer
das ergibt irgendwie ja auch sinn, da man nicht in die allgemeinere richtung casten kann. seh ich das richtig?
 
Kannste mal bitte die Klassen posten? Da kann man dann deutlich mehr mit anfangen 😉

In die allgemeine Richtung muss man auch nicht casten.
Jedes Random ist auch ein Schachcomputer, da kann man sich den Cast sparen.

Der Fehler muss irgendwo anders im Code liegen. Dein Codeschnipsel sieht erstmal richtig aus.
 
public abstract class Schachputer <S extends Schalgo>{

public Schachputer() {

}
public int[] getZug() {
return null;
}
public void ziehen(int x1, int y1, int x2, int y2) {

}
}

public class Random extends Schachputer{

private PrimFeld feld;

public Random() {
this.feld= new PrimFeld();
}

public int[] getZug() {

LinkedList<int[]> list=this.feld.getMoeglZuege();

int size=list.size();
int random=1+(int)(Math.random() * size );

return list.get(random);
}

public void ziehen(int x1, int y1, int x2, int y2) {
this.feld.ziehen(x1, y1, x2, y2);
}
}

public class Orga {
private Menue menue;
private Schachputer wcomp;
private Schachputer scomp;

public Orga() {

}
public Orga(App app) {
this.app=app;
this.primfeld=new PrimFeld();
this.menue= new Menue(this);
this.guifeld=new GuiFeld(this);
this.aus_x=-1;
this.aus_y=-1;

this.setComp();
}

public void setComp() {
int wc=this.menue.Player(true);
switch(wc) {
case 1:{
wcomp=null;
break;
}
case 2:{
this.wcomp=new Random();
}

default:wcomp=null;
}
}
 
naja hab den code ja auch nich gepostet...aber alles posten geht ja auch irgendwie nich.

merke: niemals vorbesetzte begriffe als klassennamen verwenden...
 

Neue Themen


Zurück
Oben