...
Dette er et godt utgangspunkt for å begynne å kode, og selv om det er mulig å fylle ut mer detaljer i diagrammet først, så er erfaringen at koding raskere skaper fremdrift og avdekker problemer.ved å avdekke problemer og mulige løsninger.
Vi har valget mellom tre strategier: 1) skrive MemoryProgram og dermed avdekke mer presist hvilke metoder Memory må tilby, 2) skrive Memory først og tilpasse MemoryProgram deretter, eller 3) en hybrid strategi hvor vi jobber parallelt med begge to. Dette er ofte en smaksak, men jeg foretrekker ofte å jobbe topp-ned på skissestadiet og bunn-opp med selve kodingen.
Her er kode for å representere tallsekvensen, generere et nytt tall, huske hvor langt i sekvensen brukeren har kommet og sjekke et nytt tall mot riktig tall i sekvensen:
Code Block | ||
---|---|---|
| ||
public class Memory {
private List<Integer> expectedItems = new ArrayList<Integer>();
private int acceptedCount = 0;
public int nextItem() {
int nextItem = (int) (Math.random() * 9) + 1; // new number value
expectedItems.add(nextItem); // add to number sequence
acceptedCount = 0; // reset counter
return nextItem; // return new number value
}
public Boolean acceptItem(int item) {
if (! expectedItems.get(acceptedCount).equals(item)) { // compare the number input by the user with the corresponding sequence value
return Boolean.FALSE; // if they are not the same, we indicate this by returning false
}
acceptedCount++; // correct number, so increment counter
if (acceptedCount == expectedItems.size()) { // if this was the last number
return Boolean.TRUE; // return true
}
return null; // otherwise return null, indicating correct value, but not finished with sequence
}
} |
Vi har valgt å representere tallsekvensen(expectedItems) som en liste (List) av heltallsobjekter (Integer). Vi bruker en liste og ikke en Java-tabell (int[]), siden sekvensen skal utvides og vi bruker heltallsobjekter, siden lister bare kan spesialiseres til objekt-typer og ikke verdi-typer som int. Vi har latt metoden nextItem legge det nye tallet til sekvensen og returnere det tallet, siden vi ser fra dialogen med brukeren at det skal vises frem og at MemoryProgram derfor trenger verdien. Målet for hvor langt brukeren har kommet er en indeks (int acceptedCount) inn i tallsekvensen. Returverdien fra metoden som sjekker et nytt tall fra brukeren (acceptItem(int)), må kunne skille mellom tre tilfeller: 1) tallet er feil, 2) tallet er riktig og sekvensen er komplett, og 3) tallet er riktig, men sekvensen er ikke ferdig. Derfor bruker vi et Boolean-objekt, og lar Boolean.FALSE, Boolean.TRUE og null representere de tre tilfellene.