|
| Hjælp til state-identifikation af objektie~ Fra : news.cybercity.dk |
Dato : 05-05-06 18:23 |
|
Sidder lige og nørkler med et problem:
Jeg har oprettet et Object[][] field og indsat nye objekter fra klassen
punkt.java. Jeg har benyttet mig af et state-pattern, og sætter derfor det
nye objekt til at være i forskellige states. Til dette benyttes en abstrakt
klasse PunktState og derunder forskellige state-klasser. Jeg er ret sikker
på at mit state-pattern fungerer hensigtsmæssigt.
Når jeg senere skal identificere objekterne i fieldet, har jeg problemer med
at finde ud af hvilken state de er i. Jeg har prøvet at bruge "instanceof"
operatoren, men den kan kun undersøge hvilken klasse, som objekterne er
fra - i dette tilfælde altså "Punkt".
Jeg sidder og prøver at få den til at udskrive mit field, så jeg kan få
overblik over det. Forslag til hvordan jeg kan skelne mellem de forskellige
punkt-states, så jeg kan få dem udskrevet som forskellige bogstaver,
modtages med kyshånd.
public void printField(){
for (int i = 0; i < numberOfRows; i++){
for (int j = 0; j < numberOfColumns; j++){
if(field[i][j] == null){System.out.print('.');}
if(field[i][j] instanceof Punkt){System.out.print('H');}
}
System.out.println(' ');
}
}
På forhånd tak!
| |
Thorbjørn Ravn Ander~ (05-05-2006)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 05-05-06 19:04 |
|
"news.cybercity.dk" <minmail@ok.com> writes:
> Jeg sidder og prøver at få den til at udskrive mit field, så jeg kan få
> overblik over det. Forslag til hvordan jeg kan skelne mellem de forskellige
> punkt-states, så jeg kan få dem udskrevet som forskellige bogstaver,
> modtages med kyshånd.
Lav en toString() metode som printer det ud du skal bruge. Så kan du
udskrive hvert objekt direkte for sig.
--
Thorbjørn Ravn Andersen
| |
Janus (06-05-2006)
| Kommentar Fra : Janus |
Dato : 06-05-06 03:57 |
|
Thorbjørn Ravn Andersen wrote:
> "news.cybercity.dk" <minmail@ok.com> writes:
>
>> Jeg sidder og prøver at få den til at udskrive mit field, så jeg kan få
>> overblik over det. Forslag til hvordan jeg kan skelne mellem de forskellige
>> punkt-states, så jeg kan få dem udskrevet som forskellige bogstaver,
>> modtages med kyshånd.
>
> Lav en toString() metode som printer det ud du skal bruge. Så kan du
> udskrive hvert objekt direkte for sig.
>
-og hvis du sidder og undrer dig over, hvad Thorbjørn mon mener, så er det:
I din klasse PunktState overskriver du metoden toString() med noget i
stil med:
public String toString() {
String str = "I am " + this.getIdentifier() + ", and my state is " +
this.getState();
return str;
}
Så kan du gennemløbe dine fields som du gør i dit eget eksempel, men i
den dobbelte for-løkke blot skrive:
System.out.println(field[i][j]);
Java _er_ nu et dejligt sprog.
Vh Janus
| |
Karsten Lyng (07-05-2006)
| Kommentar Fra : Karsten Lyng |
Dato : 07-05-06 02:24 |
|
Tak for de brugbare svar. Jeg sidder nu imidlertid med et nyt problem.
Hvordan kan jeg tilgå mit field fra en anden klasse? Jeg vil gerne kunne
lave forespørgelser på hvilke objekter der ligger i en given position.
| |
Janus (08-05-2006)
| Kommentar Fra : Janus |
Dato : 08-05-06 11:51 |
|
Karsten Lyng wrote:
> Tak for de brugbare svar. Jeg sidder nu imidlertid med et nyt problem.
>
> Hvordan kan jeg tilgå mit field fra en anden klasse? Jeg vil gerne kunne
> lave forespørgelser på hvilke objekter der ligger i en given position.
>
>
Normalvis laver man en get-metode i den klasse, der indeholder dit
field[][]: public Object[][] getField() { return field; }
Så giver du den anden klasse en reference til den klasse, der indeholder
dit field. Eksempelvis
public class MyClassWithField {
private Object[][] field;
...
public Object[][] getField() {
return field;
}
....
}
public class MyClassThatWantsToAccessField {
private Object[][] field;
...
public void setField(Object[][] field) {
this.field = field;
// do stuff with field
}
....
}
Og så noget i stil med:
MyClassWithField c1 = new MyClassWithField();
MyClassThatWantsToAccessField c2 = new MyClassThatWantsToAccessField();
c2.setField(c1.getField());
Vh Janus
| |
|
|