diff --git a/kont2019/src/stuff/stuff.md b/kont2019/src/stuff/stuff.md index 2c6375eb99f08910021751bbec4b44e227000c84..a0ef1897f021f5e019348448696d9c1f7e321661 100644 --- a/kont2019/src/stuff/stuff.md +++ b/kont2019/src/stuff/stuff.md @@ -1,24 +1,24 @@ # Småplukk -Med mindre noe annet er sagt, så skal klassen implementeres. - ## 1 - Iterasjon med iteratorer +Disse oppgavene dreier seg om ulik bruk av iteratorer. Med mindre noe annet er sagt, så skal klassen(e) implementeres. + ### 1.1 - for-each, Iterable og Iterator -Forklar med tekst og kode sammenhengen mellom for-each-syntaksen, altså den på formen `for (<type> <var> : <uttrykk>) ...`, og **Iterable** og **Iterator**-grensesnittene. +Forklar med tekst og kode sammenhengen mellom for-each-syntaksen, altså den på formen `for (<type> <var> : <uttrykk>) ...`, og **Iterable**- og **Iterator**-grensesnittene. Skriv svaret i [svar.md](../../svar.md)-fila. ### 1.2 - StringBuilderCharacterIterator -[StringBuilderCharacterIterator](StringBuilderCharacterIterator.java)-klassen skal implementere en iterator av tegnene (`Character`) inni en `StringBuilder`. Klassen `StringBuilder` er en `String`-aktig klasse med den (viktige) forskjellen at instanser kan endres etter opprettelsen. +[StringBuilderCharacterIterator](StringBuilderCharacterIterator.java)-klassen skal implementere en iterator av tegnene (Character) inni en `StringBuilder`. Klassen `StringBuilder` er en `String`-aktig klasse med den (viktige) forskjellen at instanser kan endres etter opprettelsen. Klassen testes av StringBuilderCharacterIteratorTest. -Klassen testes av StringBuilderCharacterIteratorTest. +- Implementer StringBuilderCharacterIterator. ### 1.3 - StringBooleanMetaIterator -[StringBooleanMetaIterator](StringBooleanMetaIterator.java)-klassen er en såkalt meta-iterator, ved at den bruker andre iteratorer som sin kilde av elementer. Akkurat denne meta-iteratoren tar inn to andre iteratorer, en for `String` og en for `Boolean`, hvilke elementer i den første som skal videreformidles eller filtreres bort styres av den andre. De to iteratorene kan antas å være like lange. +Klassen [StringBooleanMetaIterator](StringBooleanMetaIterator.java) er en såkalt meta-iterator, ved at den bruker andre iteratorer som sin kilde av elementer. Akkurat denne meta-iteratoren tar inn to andre iteratorer, hvilke elementer i den første som skal videreformidles eller filtreres bort styres av den andre. Den første itererer over strenger, den andre itererer over boolske verdier. De to iteratorene kan antas å være like lange. Eksempel: Hvis den første iteratoren gir ut sekvensen `"meta-iteratorer", "er", "ikke", "kult"` og den andre gir ut `true, true, false, true` så skal StringBooleanMetaIterator-instansen gi ut `"meta-iteratorer", "er", "kult"`. Det tredje elementet (`"ikke"`) ble altså utelatt siden den tredje logiske verdien var `false`. @@ -26,6 +26,9 @@ Eksempel: Hvis den første iteratoren gir ut sekvensen `"meta-iteratorer", "er", Klassen testes av StringBooleanMetaIteratorTest. +- Implementer StringBooleanMetaIterator. +- Du kan forvente at de to sekvensene (strenger og boolske verdier) er like lange. + ### 1.4 - EverySecondMetaIterator og EverySecondMetaIteratorTest [EverySecondMetaIterator](EverySecondMetaIterator.java) er også en meta-iterator. Den tar inn en annen iterator og slipper gjennom _annenhvert_ element. @@ -36,8 +39,8 @@ Klassen er "ferdig"-implementert i den forstand at den virker for et eksempel-ti Din oppgave er skrive to testmetoder som identifiserer begge feilene (ved at testmetoden utløser unntak på vanlig testmetodevis): -- én testmetode skal identifiserer et annet tilfelle som implementasjonen kræsjer på -- en annen testmetoden skal identifisere den fundamentale feilen +- En testmetode skal identifiserer et annet tilfelle som implementasjonen kræsjer på. +- En annen testmetoden skal identifisere den fundamentale feilen. Du skal altså _ikke_ rette feilene, men skrive gode testmetoder for å identifisere dem. @@ -45,4 +48,7 @@ Du skal altså _ikke_ rette feilene, men skrive gode testmetoder for å identi Her er oppgaven å skrive de manglende metodene i [LambdaUtilities](LambdaUtilities.java) iht. det som står i javadoc-en over metodene. Metodesignaturene (parameter- og retur-typer) skal _ikke_ endres. +- Implementer metodene beskrevet i [LambdaUtilities](LambdaUtilities.java). +- Over hver metode i kildekoden finner dere en beskriver forventet oppførsel. + `main`-metoden inneholder eksempler må bruk av metodene. (Vi har ikke laget noen testklasse for dere til denne oppgaven.)