Denna övning är det tänkt att du skall försöka göra färdigt inlämningsuppgift 1 (deadline är inte förrän efter nästa pass, men det är bra att ha den klar så snart som möjligt) -- dessutom har vi en uppgift som behandlar globala variabler.
Det är inte omöjligt att det tar mer än de schemalagda två timmarna
att lösa de rekommenderade uppgifterna och inlämningsuppgiften, men
enligt studiehandboken är det meningen att man skall lägga ner i
genomsnitt ca 3-4 timmars självstudietid för varje övningspass, utöver
övningstiden. Om det finns någon ledig plats i en övningssal under
något annat övningspas än ditt eget så får du gärna gå dit också (de
studenter vars grupp har schemalagd övningstid får dock förtur för
hjälp) -- du kan se vilken grupp du tillhör genom att i
kommandofönstret skriva ptgroup
.
Under övningen kommer du att träna på sådant som vi behandlade under den femte föreläsningen, det kan därför eventuellt hjälpa att i ett annat fönster ha anteckningarna från föreläsning 5.
emacs
Den som använder emacs
som texteditor kan använda ett
antal snabb-kommandon som underlättar en del av arbetet under
övningarna:
Alt-4
: frågar efter ett programnamn, och skapar
ett huvudprogram med det givna namnet.
Alt-2
: ger en import-sats -- du får själv fylla
i sista delen.
Alt-p
: ger System.out.print
Alt-k
: ger Keyboard.next
Inlämningsuppgift 1 (se meny till vänster)
Skriv färdigt det "hangman"-program som vi började på under föreläsningen (se nedan). Ett lösningsförslag finns här.
Under föreläsningen skrev vi ungefär följande programskelett:
class Hangman { public static void main(String[] args) { new Hangman().run(); } String hidden; StringBuilder pattern; int nbrOfGuesses; void run() { enterHiddenSentence(); while (!finished()) { enterGuess(); } congratulate(); } void enterHiddenSentence() { hidden = Keyboard.nextLine("Ange gömd rad: "); // ... } }
Några saker som kan vara bra att känna till:
Det är antagligen bäst att direkt omvandla alla bokstäver
till små bokstäver (med toLowerCase()
).
Det är lite problematiskt att läsa in gissningarna (som ju
bara är ett enstaka tecken), eftersom det av olika skäl inte
finns någon Keyboard.nextChar(...)
-operation
— istället kan vi läsa in en sträng med hjälp
av Keyboard.nextLine(...)
och sedan hämta ut
strängens första tecknen med charAt(0)
.
Av någon anledning finns det ingen indexOf(char
ch)
i klassen StringBuilder
, istället
får vi skicka in en sträng (dvs för att se om tecknet '-'
finns i
ett StringBuilder
-objekt sb
kan vi
skriva sb.indexOf("-")
— i en
sträng s
kan vi
skriva s.indexOf('-')
).
Det finns i klassen Keyboard
en nextPassword
-operation som läser in text utan
att den visas på skärmen (vilket ju är lämpligt när man skall
mata in den gömda raden) — tyvärr
fungerar nextPassword
inte alltid med exotiska
tecken som å, ä och ö.