Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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
languagejava
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.