Commit 0a86d41f authored by Vegard Hellem's avatar Vegard Hellem
Browse files

Add exam

parent 5af201cb
# Eksamen Sommer 2021
Oppgaven består av følgende deler, som ligger inne i hver sin pakke. (Noen deler har samme pakke da de benytter seg av samme klasser)
- Kommer
## Oppgave format
Oppgavebeskrivelsene finner dere under hver del. Det vil si src/main/java/del1/del1.md inneholder oppgavebeskrivelsen for del 1. Oppgavene har en tekstbeskrivelse, men denne er ikke alltid utfyllende. De mest utfyllende kravene til en metode står i dens javadoc-beskrivelse, altså en kommentar som står før metoden selv i kildekoden. I utgangspunktet trenger dere kunne å bruke .md-filene for å navigere til riktige klasser som faktisk skal implementeres, alt av krav til metoder står i selve Java-docen. Det er likevel i mange oppgaver spesifisert hvilke metoder som skal implementeres, og hva disse skal gjøre, men dette står da og i Java-docen, og kun Java-docen inneholder informasjon om f.eks Exceptions som skal utløses. Dersom du mener at Java-docs og oppgavebeskrivelse inneholder motstridende informasjon, ta først og fremst hensyn til det som står i Java-docen.
Et web-view av Java-docen kan og bli sett av å apne doc/index.html filen i prosjektet.
Hvis du ikke skulle klare å implementere en metode i en del kan du selvfølgelig bruke denne videre som om den virket (som i tidligere 'papireksamener'). Merk at metoden bør fortsatt kompilere, alle metoder kompilerer ved hjelp av *dummy* return verdier.
Alle klasser som vurderes for karakterering må kompilere. Dette betyr at du ikke skal ha noen "unresolved compilation problem" -feil eller røde linjer i Eclipse for en gitt klasse.
Unntak i koden som NullPointerException er ikke kompileringsproblemer (men vil selvfølgelig ikke få full poengsum). Dere bør teste deres egen kode slik at dere vet at denne kjører. For å hjelpe med dette har de fleste deler main-metode som inneholder noe kode for å teste implementeringen. Disse main-metodene tester ikke nødvendigvis alle tilfeller så du oppfordres til å utvide med dine egne metoder. Denne koden bør fortsatt kompilere, men trenger ikke fjernes ved levering.
## Navigering
Oppgave beskrivelsene kan brukes som hjelp til å navigere til riktige filer. Når du har åpent en .md-fil kan du trykke på **Preview**-fanen i Eclipse for å få dette på en mer leselig måte.
Alle metodene dere skal fylle inn er og markert med //TODO. Du kan få opp alle steder hvor dette står med å apne **Tasks**-viewet i Eclipse. Dette finner du ved **Window > Show View > Other** og søke på *tasks*.
## Besvarelse
*Oppgaveteksten* finnes i  **del1.md**-filer og andre md-filer i prosjektet og kan leses både på gitlab og i IDE-en. Versjoner på nynorsk og engelsk finnes i egne filer. Eclipse-editoren for md-filer har en  **Preview**-fane som gjør det lett å lese og navigere.
Oppgaven  *besvares* ved å bygge videre på kode-filene som er der, og fylle inn evt antakelser du gjør, i en separat md-fil (oppgavekommentarer.md)
## Nedlasting og import
*Nedlasting* og  *import* skjer enten ved å laste ned en zip-fil fra repo-sida på gitlab eller Inspera, eller ved å klone git-repoet.
Ved  *import av zip-fil*, så skal veiviseren  **Import > Maven > Existing Maven Projects** brukes. Naviger til den nedlastede zip-filen (husk og åpne zip-filen først) og velg mappen som gjør at pom.xml filen ligger inne i denne. Ved import av zip-fil bør du og bytte navn på prosjektet hvis du laster det ned på forhånd, så du ikke får konflikt med navngivning når du skal laste ned selve eksamen. 
*Import med kloning* skjer med en annen veiviser, som  beskrevet på følgende wiki-side:  <https://www.ntnu.no/wiki/display/tdt4100/Importere+kode+fra+git>
Dersom det blir konflikter når dere puller kan dere høyreklikke og *Replace with > Head Revision * på prosjektet.
## Levering
Når eksamen skal leveres kan du gjøre dette på denne måten:
**Zippe i Windows**
- Høyreklikk på prosjektikonet i 'Package Explorer' helt til venstre i Eclipse.
- Velg 'Show in' -> click 'System Explorer'.
- Du skal nå få opp et utforskervindu (ikke i Eclipse, men i Windows) som står åpent i en folder som sannsynligvis slutter på git. For meg er det _'C:\Users\borgeha\git'_ Denne folderen inneholder prosjektfolderen vi skal komprimere.
- Høyreklikk prosjektfolderen, den skal hete kont-2021 -> meny 'Send til' -> 'Komprimert (zippet) mappe'.
- Windows komprimerer nå prosjektfolderen kont-2021, og spør deg hva den skal kalles La den hete det som foreslås.
- Denne zipfilen er filen dere skal laste opp til Inspera til slutt.
- Dere finner et par bilder av prosessen til slutt i denne filen.
**Zippe i OS X**
- Følg instruksjonene som for Windows overfor, men ting har andre navn.
- Høyreklikk prosjektet i Eclipse -> 'Åpne i Finder'
- Høyreklikk prosjektfolderen og velg 'Komprimer'
- Filen du får er den som skal lastes opp til Inspera.
**System Explorer**
<img src="System_Explorer.png" alt="drawing" width="600"/>
**Compress**
<img src="Compress.png" alt="drawing" width="600"/>
# Eksamen Vår 2021
Oppgaven består av følgende deler, som ligger inne i hver sin pakke. (Noen deler har samme pakke da de benytter seg av samme klasser)
- [Del 1](src/main/java/del1/del1.md): VoterCounter (10 %)
- [Del 2](src/main/java/del2/del2.md): Java FX (7.5 %)
- [Del 3](src/main/java/del3/del3.md): Delegering (10 %)
- [Del 4](src/main/java/del4/del4.md): Objektstrukturer og delegering (20 %)
- [Del 5](src/main/java/del5_8/del5_8.md): Observatør-Observert (15 %)
- [Del 6](src/main/java/del5_8/del5_8.md): Arv (7.5 %)
- [Del 7](src/main/java/del5_8/del5_8.md): Objektstrukturer og java-teknikker (10 %)
- [Del 8](src/main/java/del5_8/del5_8.md): Interfaces og Comparator (5 %)
- [Del 9](src/main/java/del9/del9.md): Funksjonelle grensesnitt og lister (10 %)
- [Del 10](src/main/java/del10/del10.md): Testing (5 %)
## Oppgaveformat
Oppgavebeskrivelsene finner dere under hver del. Det vil si src/main/java/del1/del1.md inneholder oppgavebeskrivelsen for del 1. Oppgavene har en tekstbeskrivelse, men denne er ikke alltid utfyllende. De mest utfyllende kravene til en metode står i dens javadoc-beskrivelse, altså en kommentar som står før metoden selv i kildekoden. I utgangspunktet trenger dere kunne å bruke .md-filene for å navigere til riktige klasser som faktisk skal implementeres, alt av krav til metoder står i selve Java-docen. Det er likevel i mange oppgaver spesifisert hvilke metoder som skal implementeres, og hva disse skal gjøre, men dette står da og i Java-docen, og kun Java-docen inneholder informasjon om f.eks Exceptions som skal utløses. Dersom du mener at Java-docs og oppgavebeskrivelse inneholder motstridende informasjon, ta først og fremst hensyn til det som står i Java-docen.
Et web-view av Java-docen kan og bli sett ved å åpne filen doc/index.html prosjektet.
Hvis du ikke skulle klare å implementere en metode i en del kan du selvfølgelig bruke denne videre som om den virket (som i tidligere 'papireksamener'). Merk at metoden bør fortsatt kompilere, alle metoder kompilerer ved hjelp av *dummy* return verdier, som er verdier av riktig type, men ikke korrekte return-verdi.
Alle klasser som vurderes for karakterering må kompilere. Dette betyr at du ikke skal ha noen "unresolved compilation problem" -feil eller røde linjer i Eclipse for en gitt klasse.
Unntak i koden som NullPointerException er ikke kompileringsproblemer (men vil selvfølgelig ikke få full poengsum). Dere bør teste deres egen kode slik at dere vet at denne kjører. For å hjelpe med dette har de fleste deler main-metode som inneholder noe kode for å teste implementeringen. Disse main-metodene tester ikke nødvendigvis alle tilfeller så du oppfordres til å utvide med dine egne metoder. Denne koden bør fortsatt kompilere, men trenger ikke fjernes ved levering.
## Navigering
Oppgavebeskrivelsene kan brukes som hjelp til å navigere til riktige filer. Når du har åpent en .md-fil kan du trykke på **Preview**-fanen i Eclipse for å få dette på en mer leselig måte.
Alle metodene dere skal fylle inn er og markert med //TODO. Du kan få opp alle steder hvor dette står med å apne **Tasks**-viewet i Eclipse. Dette finner du ved **Window > Show View > Other** og søke på *tasks*.
## Besvarelse
*Oppgaveteksten* finnes i  **del1.md**-filer og andre md-filer i prosjektet og kan leses både på gitlab og i IDE-en. Versjoner på nynorsk og engelsk finnes i egne filer. Eclipse-editoren for md-filer har en  **Preview**-fane som gjør det lett å lese og navigere.
Oppgaven  *besvares* ved å bygge videre på kode-filene som er der, og fylle inn evt antakelser du gjør, i en separat md-fil (oppgavekommentarer.md)
## Nedlasting og import
*Nedlasting* og  *import* skjer enten ved å laste ned en zip-fil fra repos-sida på gitlab eller Inspera, eller ved å klone git-reposet. Samme zip-fil ligger også som element her på Bb. 
Ved  *import av zip-fil*, så skal veiviseren  **Import > Maven > Existing Maven Projects** brukes. Naviger til den nedlastede zip-filen (husk og åpne zip-filen først) og velg mappen som gjør at pom.xml filen ligger inne i denne. Ved import av zip-fil bør du og bytte navn på prosjektet hvis du laster det ned på forhånd, så du ikke får konflikt med navngivning når du skal laste ned selve eksamen. 
*Import med kloning* skjer med en annen veiviser, som  beskrevet på følgende wiki-side:  <https://www.ntnu.no/wiki/display/tdt4100/Importere+kode+fra+git>. Lenken en da kan klone er *https://gitlab.stud.idi.ntnu.no/tdt4100/v2021/kont-2021*.
Dersom det blir konflikter når dere puller kan dere høyreklikke og *Replace with > Head Revision * på prosjektet.
## Levering
Når eksamen skal leveres kan du gjøre dette på denne måten:
**Zippe i Windows**
- Høyreklikk på prosjektikonet i 'Package Explorer' helt til venstre i Eclipse.
- Velg 'Show in' -> click 'System Explorer'.
- Du skal nå få opp et utforskervindu (ikke i Eclipse, men i Windows) som står åpent i en folder som sannsynligvis slutter på git. For meg er det _'C:\Users\borgeha\git'_ Denne folderen inneholder prosjektfolderen vi skal komprimere.
- Høyreklikk prosjektfolderen, den skal hete kont2021 -> meny 'Send til' -> 'Komprimert (zippet) mappe'.
- Windows komprimerer nå prosjektfolderen kont2021, og spør deg hva den skal kalles La den hete det som foreslås.
- Denne zipfilen er filen dere skal laste opp til Inspera til slutt.
- Dere finner et par bilder av prosessen til slutt i denne filen.
**Zippe i OS X**
- Følg instruksjonene som for Windows overfor, men ting har andre navn.
- Høyreklikk prosjektet i Eclipse -> 'Åpne i Finder'
- Høyreklikk prosjektfolderen og velg 'Komprimer'
- Filen du får er den som skal lastes opp til Inspera.
**System Explorer**
<img src="System_Explorer.png" alt="drawing" width="600"/>
**Compress**
<img src="Compress.png" alt="drawing" width="600"/>
# Exam Summer 2021
The task consists of the following parts, which are inside separate packages. (Some parts have the same package as they use the same classes)
Coming
## Exam format
Task descriptions can be found under each package. That is src/main/java/del1/del1_en.md contains the task description for part 1. The tasks have a text description, but this is not always complete. The most comprehensive requirements for a method are in its javadoc description, ie a comment that precedes the method itself in the source code. Basically, you can use the .md files to navigate to the right classes that are actually to be implemented, all of the requirements for methods are in the Java doc itself. It is nevertheless specified in many tasks which methods are to be implemented and what these are to do, but this is also stated in the Java-doc, and only the Java-doc contains information about eg Exceptions to be triggered. If you think there's differences in the task description and the Java-doc, consider the java-docs the source of truth.
A web-page view of the Java-doc can be seen by opening the docs/index.html file in the project.
If you are not be able to implement a method in a part, you can of course continue to use it as if it worked (as in previous 'paper exams'). The method should still compile, but all skeleton code provided by us will compile initially.
All classes considered for grading must compile. This means that you should not have any "unresolved compilation problem" errors or red lines in Eclipse for a given class.
Exceptions in the code such as NullPointerException are not compilation problems (but will of course not get the full score). You should test your own code so that you know it is running. To help with this, most parts have main method that contains some code to test the implementation. These main methods do not necessarily test all cases so you're encouraged to extend it with your own testing. This testing should compile but otherwise there's no need to remove it before delivery.
## Navigation
Task descriptions can be used to help navigate to the correct files. Once you have opened a .md file, you can press the **Preview** tab in Eclipse to make it more readable.
All the methods you have to fill in are marked with // TODO. You can get up all //TODOs this is by opening the **Tasks** view in Eclipse. This can be found at **Window> Show View> Other** and search for * tasks *.
## Answer
* The thesis text * can be found in ** del1.md ** files and other md files in the project and can be read both on gitlab and in the IDE. Versions in Nynorsk and English can be found in separate files. The Eclipse editor for md files has a ** Preview ** tab that makes it easy to read and navigate.
The task *is answered* by building on the code files that are there, and in any comments on the code, e.g. assumptions you make, in a separate md file (oppgavekommentarer.md)
## Download and import
Download* and *import* is done either by downloading a zip file from the repo page on gitlab or Inspera, or by cloning the git repo.
For *import of zip file*, the wizard **Import> Maven> Existing Maven Projects** should be used. Navigate to the downloaded zip file (remember to open the zip file first) and select the folder that contains the pom.xml file. When importing a zip file, you should also change the name of the project if you download it in advance, so that you do not have a conflict with naming when you download the exam itself.
* Import with cloning * takes place with another wizard, as described on the following wiki page: <https://www.ntnu.no/wiki/display/tdt4100/Importe+kode+fra+git>.
If there are conflicts when you pull, you can right-click and * Replace with> Head Revision * on the project.
## Delivery
When you are ready to deliver your exam, your project folder needs to be zipped and uploaded to Inspera. You can prepare the zip file like this:
**Zipping in Windows**
- Right-click the project icon in the leftmost 'Package Explorer' window in Eclipse.
- Choose 'Show in' -> click 'System Explorer'.
- You should now have a System Explorer window (not in Eclipse) open in a folder that most likely ends with 'git', for me it is 'C:\Users\borgeha\git'. The folder we want to compress is the project folder inside this git folder.
- Right click the project folder kont-2021 -> Send to -> Compressed (zipped) folder.
- Windows now compresses this folder into the git folder, and asks you to name it. Leave it as it is.
- This zip file is the one you shall upload to Inspera.
- You'll find a couple of screen shots of the process below.
**Zipping in OS X**
- Follow the same guideline as for Windows above, but instead chose to open in 'Finder'.
- Inside the Finder, right click kont-2021 and choose 'Compress'
- The resulting file is the one you upload to Inspera.
**System Explorer**
<img src="System_Explorer.png" alt="drawing" width="600"/>
**Compress**
# Exam Spring 2021
The task consists of the following parts, which are inside separate packages. (Some parts have the same package as they use the same classes)
- [Part 1](src/main/java/del1/del1_en.md): VoterCounter (10 %)
- [Part 2](src/main/java/del2/del2_en.md): Java FX (7.5 %)
- [Part 3](src/main/java/del3/del3_en.md): Delegation (10 %)
- [Part 4](src/main/java/del4/del4_en.md): Objectstructures and delegation (20 %)
- [Part 5](src/main/java/del5_8/del5_8_en.md): Observer-observed (15 %)
- [Part 6](src/main/java/del5_8/del5_8_en.md): Inheritance (7.5 %)
- [Part 7](src/main/java/del5_8/del5_8_en.md): Objektstrukturer og java-teknikker (10 %)
- [Part 8](src/main/java/del5_8/del5_8_en.md): Interfaces and Comparator (5 %)
- [Part 9](src/main/java/del9/del9_en.md): Functional interfaces and lists (10 %)
- [Part 10](src/main/java/del10/del10.md): Testing (5 %)
## Exam format
Task descriptions can be found under each package. That is src/main/java/del1/del1_en.md contains the task description for part 1. The tasks have a text description, but this is not always complete. The most comprehensive requirements for a method are in its javadoc description, ie a comment that precedes the method itself in the source code. Basically, you can use the .md files to navigate to the right classes that are actually to be implemented, all of the requirements for methods are in the Java doc itself. It is nevertheless specified in many tasks which methods are to be implemented and what these are to do, but this is also stated in the Java-doc, and only the Java-doc contains information about eg Exceptions to be triggered. If you think there's differences in the task description and the Java-doc, consider the java-docs the source of truth.
A web-page view of the Java-doc can be seen by opening the docs/index.html file in the project.
If you are not be able to implement a method in a part, you can of course continue to use it as if it worked (as in previous 'paper exams'). The method should still compile, but all skeleton code provided by us will compile initially.
All classes considered for grading must compile. This means that you should not have any "unresolved compilation problem" errors or red lines in Eclipse for a given class.
Exceptions in the code such as NullPointerException are not compilation problems (but will of course not get the full score). You should test your own code so that you know it is running. To help with this, most parts have main method that contains some code to test the implementation. These main methods do not necessarily test all cases so you're encouraged to extend it with your own testing. This testing should compile but otherwise there's no need to remove it before delivery.
## Navigation
Task descriptions can be used to help navigate to the correct files. Once you have opened a .md file, you can press the **Preview** tab in Eclipse to make it more readable.
All the methods you have to fill in are marked with // TODO. You can get up all //TODOs this is by opening the **Tasks** view in Eclipse. This can be found at **Window> Show View> Other** and search for * tasks *.
## Answer
* The thesis text * can be found in ** del1.md ** files and other md files in the project and can be read both on gitlab and in the IDE. Versions in Nynorsk and English can be found in separate files. The Eclipse editor for md files has a ** Preview ** tab that makes it easy to read and navigate.
The task *is answered* by building on the code files that are there, and in any comments on the code, e.g. assumptions you make, in a separate md file (oppgavekommentarer.md)
## Download and import
Download* and *import* is done either by downloading a zip file from the repo page on gitlab or Inspera, or by cloning the git repo. The same zip file is also an element here on Bb.
For *import of zip file*, the wizard **Import> Maven> Existing Maven Projects** should be used. Navigate to the downloaded zip file (remember to open the zip file first) and select the folder that contains the pom.xml file. When importing a zip file, you should also change the name of the project if you download it in advance, so that you do not have a conflict with naming when you download the exam itself.
* Import with cloning * takes place with another wizard, as described on the following wiki page: <https://www.ntnu.no/wiki/display/tdt4100/Importe+kode+fra+git>.
If there are conflicts when you pull, you can right-click and * Replace with> Head Revision * on the project.
## Delivery
When you are ready to deliver your exam, your project folder needs to be zipped and uploaded to Inspera. You can prepare the zip file like this:
**Zipping in Windows**
- Right-click the project icon in the leftmost 'Package Explorer' window in Eclipse.
- Choose 'Show in' -> click 'System Explorer'.
- You should now have a System Explorer window (not in Eclipse) open in a folder that most likely ends with 'git', for me it is 'C:\Users\borgeha\git'. The folder we want to compress is the project folder inside this git folder.
- Right click the project folder kont2021 -> Send to -> Compressed (zipped) folder.
- Windows now compresses this folder into the git folder, and asks you to name it. Leave it as it is.
- This zip file is the one you shall upload to Inspera.
- You'll find a couple of screen shots of the process below.
**Zipping in OS X**
- Follow the same guideline as for Windows above, but instead chose to open in 'Finder'.
- Inside the Finder, right click kont2021 and choose 'Compress'
- The resulting file is the one you upload to Inspera.
**System Explorer**
<img src="System_Explorer.png" alt="drawing" width="600"/>
**Compress**
<img src="Compress.png" alt="drawing" width="600"/>
\ No newline at end of file
# Eksamen Sommer 2021
Oppgåva består av følgjande delar, som ligg inne i kvar sin pakke. (Nokon delar har same pakke då dei nyttar seg av same klassar)
Kjem
## Oppgåve format
Oppgavebeskrivelsene finn de under kvar del. Det vil seia src/main/java/del1/del1.md inneheld oppgåveskildringa for del 1. Oppgåvene har ei tekstskildring, men denne er ikkje alltid utfyllande. Dei mest utfyllande krava til ein metode står i dens javadoc-beskrivelse, altså ein kommentar som står før metoden sjølv i kjeldekoden. I utgangspunktet treng de kunne å bruka .md-filene for å navigera til riktige klassar som faktisk skal implementerast, alt av krav til metodar står i sjølve Java-docen. Det er likevel i mange oppgåver spesifiserte kva metodar som skal implementerast, og kva desse skal gjera, men dette står då og i Java-docen, og berre Java-docen inneheld informasjon om f.eks Exceptions som skal utløysast. Dersom du meiner at Java-docs og oppgåveskildring inneheld motstridande informasjon, ta først og fremst omsyn til det som står i Java-docen.
Eit web-view av Java-docen kan og bli sett av å apne doc/index.html fila i prosjektet.
Viss du ikkje skulle klara å implementera ein metode i ein del kan du sjølvsagt bruka denne vidare som om han verka (som i tidlegare 'papireksamenar'). Merk at metoden bør framleis kompilera, alle metodar kompilerer ved hjelp av *dummy* return verdiar.
Alle klassar som blir for vurderte karakterering må kompilera. Dette betyr at du ikkje skal ha nokon "unresolved compilation problem" -feil eller raude linjer i Eclipse for ein gitt klasse.
Unntak i koden som NullPointerException er ikkje kompileringsproblemer (men vil sjølvsagt ikkje få full poengsum). De bør testa dykkar eigen kode slik at de veit at denne køyrer. For å hjelpa med dette har dei fleste delar main-metode som inneheld noko kode for å testa implementeringen. Desse main-metodene testar ikkje nødvendigvis alle tilfelle så du blir oppfordra til å utvida med dine eigne metodar. Denne koden bør framleis kompilera, men treng ikkje fjernast ved levering.
## Navigering
Oppgave skildringane kan brukast som hjelp til å navigera til riktige filer. Når du har ope ein .md-fil kan du trykka på **Preview*-fana i Eclipse for å få dette på ein meir leselig måta.
Alle metodane de skal fylla inn er og markerte med //TODO. Du kan få opp alle stader der dette står med å apne **Tasks*-viewet i Eclipse. Dette finn du ved **Window > Show View > Other** og søka på *tasks*.
## Besvarelse
Oppgaveteksten finst i  **del1.md*-filer og andre md-filer i prosjektet og kan lesast både på gitlab og i IDE-en. Versjonar på nynorsk og engelsk finst i eigne filer. Eclipse-editoren for md-filer har ein  **Preview*-fane som gjer det lett å lesa og navigera.
Oppgåva  blir svart på* ved å bygga vidare på kode-filene som er der, og fylla evt. antakelser du gjer, i ein separat md-fil (oppgavekommentarer.md)
## Nedlasting og import
Nedlasting og  import* skjer enten ved å lasta ned ein zip-fil frå repo-sida på gitlab eller Inspera, eller ved å klona git-repoet.
Ved  import av zip-fil*, så skal vegvisaren  *Import > Maven > Existing Maven Projects** brukast. Naviger til den nedlastede zip-filen (hugs og opne zip-filen først) og vel mappa som gjer at pom.xml fila ligg inne i denne. Ved import av zip-fil bør du og byta namn på prosjektet viss du lastar det ned på førehand, så du ikkje får konflikt med navngivning når du skal lasta ned sjølve eksamen. 
Import med kloning skjer med ein annan vegvisar, som  beskrive på følgjande wiki-side:  <https://www.ntnu.no/wiki/display/tdt4100/Importere+kode+fra+git>
Dersom det blir konfliktar når de pullar kan de høyreklikke og *Replace with > Head Revision * på prosjektet.
## Levering
Når eksamen skal leverast kan du gjera dette på denne måten:
**Zippe i Windows*
- Høgreklikk på prosjektikonet i 'Package Explorer' heilt til venstre i Eclipse.
- Vel 'Show in' -> click 'System Explorer'.
- Du skal no få opp eit utforskervindu (ikkje i Eclipse, men i Windows) som står ope i ein foldar som sannsynlegvis sluttar på git. For meg er det _'C:\Users\borgeha\git'_ Denne folderen inneheld prosjektfolderen vi skal komprimera.
- Høgreklikk prosjektfolderen, han skal heita kont-2021 -> meny 'Send til' -> 'Komprimert (zippet) mappe'.
- Windows komprimerer no prosjektfolderen kont-2021, og spør deg kva han skal kallast La den heite det som blir foreslått.
- Denne zipfilen er fila de skal lasta opp til Inspera til slutt.
- De finn eit par bilde av prosessen til slutt i denne fila.
**Zippe i OS X*
- Følg instruksjonane som for Windows overfor, men ting har andre namn.
- Høgreklikk prosjektet i Eclipse -> 'Åpne i Finder'
- Høgreklikk prosjektfolderen og vel 'Komprimer'
- Fila du får er den som skal lastast opp til Inspera.
*System Explorer*
<img src="System_Explorer.png" alt="drawing" width="600"/>
**Compress*
# Eksamen Vår 2021
Oppgåva består av følgjande delar, som ligg inne i kvar sin pakke. (Nokon delar har same pakke då dei nyttar seg av same klassar)
- [Del 1](src/main/java/del1/del1_nn.md): VoterCounter (10 %)
- [Del 2](src/main/java/del2/del2_nn.md): Java FX (7.5 %)
- [Del 3](src/main/java/del3/del3_nn.md): Delegering (10 %)
- [Del 4](src/main/java/del4/del4_nn.md): Objektstrukturar og delegering (20 %)
- [Del 5](src/main/java/del5_8/del5_8_nn.md): Observatør-Observert (15 %)
- [Del 6](src/main/java/del5_8/del5_8_nn.md): Arv (7.5 %)
- [Del 7](src/main/java/del5_8/del5_8_nn.md): Objektstrukturar og java-teknikker (10 %)
- [Del 8](src/main/java/del5_8/del5_8_nn.md): Interfaces og Comparator (5 %)
- [Del 9](src/main/java/del9/del9_nn.md): Funksjonelle grensesnitt og lister (10 %)
- [Del 10](src/main/java/del10/del10_nn.md): Testing (5 %)
## Oppgåve format
Oppgavebeskrivelsene finn de under kvar del. Det vil seia src/main/java/del1/del1.md inneheld oppgåveskildringa for del 1. Oppgåvene har ei tekstskildring, men denne er ikkje alltid utfyllande. Dei mest utfyllande krava til ein metode står i dens javadoc-beskrivelse, altså ein kommentar som står før metoden sjølv i kjeldekoden. I utgangspunktet treng de kunne å bruka .md-filene for å navigera til riktige klassar som faktisk skal implementerast, alt av krav til metodar står i sjølve Java-docen. Det er likevel i mange oppgåver spesifiserte kva metodar som skal implementerast, og kva desse skal gjera, men dette står då og i Java-docen, og berre Java-docen inneheld informasjon om f.eks Exceptions som skal utløysast. Dersom du meiner at Java-docs og oppgåveskildring inneheld motstridande informasjon, ta først og fremst omsyn til det som står i Java-docen.
Eit web-view av Java-docen kan og bli sett av å apne doc/index.html fila i prosjektet.
Viss du ikkje skulle klara å implementera ein metode i ein del kan du sjølvsagt bruka denne vidare som om han verka (som i tidlegare 'papireksamenar'). Merk at metoden bør framleis kompilera, alle metodar kompilerer ved hjelp av *dummy* return verdiar.
Alle klassar som blir for vurderte karakterering må kompilera. Dette betyr at du ikkje skal ha nokon "unresolved compilation problem" -feil eller raude linjer i Eclipse for ein gitt klasse.
Unntak i koden som NullPointerException er ikkje kompileringsproblemer (men vil sjølvsagt ikkje få full poengsum). De bør testa dykkar eigen kode slik at de veit at denne køyrer. For å hjelpa med dette har dei fleste delar main-metode som inneheld noko kode for å testa implementeringen. Desse main-metodene testar ikkje nødvendigvis alle tilfelle så du blir oppfordra til å utvida med dine eigne metodar. Denne koden bør framleis kompilera, men treng ikkje fjernast ved levering.
## Navigering
Oppgave skildringane kan brukast som hjelp til å navigera til riktige filer. Når du har ope ein .md-fil kan du trykka på **Preview*-fana i Eclipse for å få dette på ein meir leselig måta.
Alle metodane de skal fylla inn er og markerte med //TODO. Du kan få opp alle stader der dette står med å apne **Tasks*-viewet i Eclipse. Dette finn du ved **Window > Show View > Other** og søka på *tasks*.
## Besvarelse
Oppgaveteksten finst i  **del1.md*-filer og andre md-filer i prosjektet og kan lesast både på gitlab og i IDE-en. Versjonar på nynorsk og engelsk finst i eigne filer. Eclipse-editoren for md-filer har ein  **Preview*-fane som gjer det lett å lesa og navigera.
Oppgåva  blir svart på* ved å bygga vidare på kode-filene som er der, og fylla evt. antakelser du gjer, i ein separat md-fil (oppgavekommentarer.md)
## Nedlasting og import
Nedlasting og  import* skjer enten ved å lasta ned ein zip-fil frå repo-sida på gitlab eller Inspera, eller ved å klona git-repoet. Same zip-fil ligg òg som element her på Bb. 
Ved  import av zip-fil*, så skal vegvisaren  *Import > Maven > Existing Maven Projects** brukast. Naviger til den nedlastede zip-filen (hugs og opne zip-filen først) og vel mappa som gjer at pom.xml fila ligg inne i denne. Ved import av zip-fil bør du og byta namn på prosjektet viss du lastar det ned på førehand, så du ikkje får konflikt med navngivning når du skal lasta ned sjølve eksamen. 
Import med kloning skjer med ein annan vegvisar, som  beskrive på følgjande wiki-side:  <https://www.ntnu.no/wiki/display/tdt4100/Importere+kode+fra+git>
Dersom det blir konfliktar når de pullar kan de høyreklikke og *Replace with > Head Revision * på prosjektet.
## Levering
Når eksamen skal leverast kan du gjera dette på denne måten:
**Zippe i Windows*
- Høgreklikk på prosjektikonet i 'Package Explorer' heilt til venstre i Eclipse.
- Vel 'Show in' -> click 'System Explorer'.
- Du skal no få opp eit utforskervindu (ikkje i Eclipse, men i Windows) som står ope i ein foldar som sannsynlegvis sluttar på git. For meg er det _'C:\Users\borgeha\git'_ Denne folderen inneheld prosjektfolderen vi skal komprimera.
- Høgreklikk prosjektfolderen, han skal heita kont2021 -> meny 'Send til' -> 'Komprimert (zippet) mappe'.
- Windows komprimerer no prosjektfolderen kont2021, og spør deg kva han skal kallast La den heite det som blir foreslått.
- Denne zipfilen er fila de skal lasta opp til Inspera til slutt.
- De finn eit par bilde av prosessen til slutt i denne fila.
**Zippe i OS X*
- Følg instruksjonane som for Windows overfor, men ting har andre namn.
- Høgreklikk prosjektet i Eclipse -> 'Åpne i Finder'
- Høgreklikk prosjektfolderen og vel 'Komprimer'
- Fila du får er den som skal lastast opp til Inspera.
*System Explorer*
<img src="System_Explorer.png" alt="drawing" width="600"/>
**Compress*
<img src="Compress.png" alt="drawing" width="600"/>
\ No newline at end of file
......@@ -2,3 +2,23 @@
Her kan dere skrive antakelser dere har gjort i løpet av oppgaven.
## Del 1
## Del 2
## Del 3
## Del 4
## Del 5
## Del 6
## Del 7
## Del 8
## Del 9
## Del 10
\ No newline at end of file
package del1;
public class VoterCounter {
// Add any needed fields here
public static final String TIE_RESULT = "TIE";
/**
* Register a candidate to the poll
*
* @param candidate the new candidate to add
*/
public void addCandidate(String candidate) {
// TODO
}
/**
* Vote on a given candidate
*
* @param candidate the candidate to vote on
*
* @throws IllegalArgumentException if the candidate is not registered
*/
public void castVote(String candidate) {
// TODO
}
/**
* Prints all the results in an arbitrary order. The results should be on the
* format {candidate name}-{number of votes for the candidate} with each
* candidate on a new line
*
* Example output with two candidates, "Candidate1" with 7 votes, and
* "Candidate2" with 6 votes
*
* Candidate1-7
* Candidate2-6
*/
public String getFormattedResults() {
// TODO
return null;
}
/**
* Returns the number of votes a candidate has received
*
* @param candidate the candidate to get number of votes for
* @return the number of votes the candidate has received. Returns null if the
* candidate is not registered
*/
public Integer getNumberOfVotes(String candidate) {
// TODO
return 0;
}
/**
*
* @return the name of the candidate who won the election. If two or more
* candidates got the same number of maximum votes, return the
* TIE_RESULT field. Return null if there are no candidates.
*/
public String getWinner() {
// TODO
return null;
}
public static void main(String[] args) {
String candidate1 = "CANDIDATE1";
String candidate2 = "CANDIDATE2";
VoterCounter counter = new VoterCounter();
counter.addCandidate(candidate1);
counter.addCandidate(candidate2);
// Should print 0
System.out.println(counter.getNumberOfVotes(candidate1));
counter.castVote(candidate1);
// Should print 1;
System.out.println(counter.getNumberOfVotes(candidate1));
// Should print CANDIDATE 1
System.out.println(counter.getWinner());
counter.castVote(candidate2);
// Should print TIE
System.out.println(counter.getWinner());
}
}
# Del 1: VoterCounter.
Utfyll klassen [VoterCounter](VoterCounter.java), og alle metodene i denne klassen.
Legg til egne nødvendige felt. **VoterCounter** skal ha oversikt over kandidater som stiller til valg, og antall stemmer de har fått.
- *addCandidate(String candidateName)* - Registrerer en kandidat en kan stemme på
- *castVote(String candidate)* - Gir en stemme til kandidaten
- *getFormattedResults()* - Returnerer antall stemmer hver kandidat har fått
- *getVotes(String candidate)* - Returnerer antall stemmer en kandidat har fått
- *getWinner()* - Returnerer kandidaten som fikk flest stemmer, eventuelt om det ble uavgjort
# Part 1: VoterCounter.
Populate the class [VoterCounter](VoterCounter.Java), and all methods in this class.
Add your own required fields. **VoterCounter** should have an overview of candidates running for office and the number of votes they have received.
- *addCandidate(String candidateName)* - Registers a candidate to vote for
- *castVote(String candidate)* - Gives a voice to the candidate
- *getFormattedResults()* - Returns the number of votes each candidate has received
- *getVotes(String candidate)* - Returns the number of votes a candidate has received
- *getWinner()* - Returns the candidate who received the most votes, or if there was a tie.
\ No newline at end of file
# Del 1: VoterCounter.
Utfyll klassen [VoterCounter](VoterCounter.Java), og alle metodane i denne klassen.
Legg til eigne nødvendige felt. **VoterCounter** skal ha oversyn over kandidatar som stiller til val, og tal stemmer dei har fått.
- *addCandidate(String candidateName)* - Registrerer ein kandidat ein kan stemma på
- *castVote(String candidate)* - Gir ei stemme til kandidaten
- *getFormattedResults()* - Returnerer ut tal stemmer kvar kandidat har fått
- *getVotes(String candidate)* - Returnerer tal stemmer ein kandidat har fått
- *getWinner()* - Returnerer kandidaten som fekk flest stemmer, evt om det vart uavgjort.
\ No newline at end of file
package del10;
public class TestableClass {
private Integer myInteger;
private String myString;
public TestableClass(Integer myInteger, String myString) {
this.myInteger = myInteger;
this.myString = myString;
}
/**
*
* @param otherString a string
* @return whether myString text value is equal to the otherString
*/
public boolean isMyStringEqualTo(String otherString) {
return this.myString == otherString;
}
/**
*
* @return myInteger + 1;
*/
public Integer getMyIntegerIncrement() {
return this.myInteger + 1;
}
}
# Del 10 - Testing
Ta utgangspunkt i [TestableClass](TestableClass.java). De to metodene utenom konstruktøren har feil i implementasjonen, eller håndterer ikke alle tilfeller like godt.
Fyll ut testmetodene i **TestableClassTest** i *src/test/java/del10* som skal eksponere feilene. (Testene skal feile)
- *testIsMyStringEqualsToYieldsWrongResult()* - Fanger opp et tilfelle hvor *isMyStringEqualsTo* gir feil resultat
- *testIncrementIntegerHandlesEdgeCases()* - Fanger opp et tilfelle hvor *getMyIntegerIncrement* ikke oppfører seg slik den skal
# Part 10 – Testing
Start from [TestableClass](TestableClass.java). The two methods other than the constructor are flawed in the implementation, or do not handle all cases equally well.