---
# System prepended metadata

title: Programmering 2 - Julklappsinslagning

---

# Programmering 2 - Julklappsinslagning

### Introduktion
Er uppgift är att skapa ett program som utifrån dimensionerna på ett paket (ett rätblock) kan återge vilken storlek på inslagningspapper och snöre som behövs.

Utgångspunkten är att du får en sträng som representerar ett pakets dimensioner. Strängen innehåller paketets bredd, höjd och längd i centimeter, formaterad som `"<bredd>:<höjd>:<längd>"`, alltså separerade med kolon.

Skapa en klass som heter `GiftWrappingCalculator` där ni i slutändan ska ha dessa metoder:
* `calculateMinRibbonLength(string gift)`
* `calculateMinRibbonLength(string gift, double extraPercentage)`
* `calculateMinPaperArea(string gift)`
* `calculateMinPaperLength(string gift, double rollLength)`

Den här klassen (.java-filen) ska ni lämna in på classroom.

För alla metoder som returnerar en double, ska metoden returnera `-1` om man får felaktig eller orimlig input. Till exempel om en dimension är negativ, eller saknas.


### Sätta upp projektet

1. Skapa ett nytt intellij-projekt. 
2. Skapa en ny java-klass som heter GiftWrappingCalculator. Här skriver ni de fyra metoderna som är beskrivna ovan. OBS: Den här klassen ska inte ha en main metod
3. Skapa en till java-klass som heter Main. Här kan ni ha en main-metod för att testa era metoder. För att köra en av metoderna i GiftWrappingCalculator gör ni följande:

```java
public static void main(String[] args){
    GiftWrappingCalculator calculator = new GiftWrappingCalcultor();
    
    double result = calculator.calculateMinRibbonLength("1:2:3");
    
    System.out.println(result);
}
```

4. Skapa en till java-klass som heter Part1Test och kopiera in koden för Part1Test som ligger på classroom. Ni kan behöva fixa import-raderna högst upp i filen genom att klicka på glödlampan och lägga till JUnit.
5. Kör testerna i filen.
6. Upprepa samma sak sedan för resterande test filer när ni har skapat respektive metod i GiftWrappingCalculator

### Del 1: Bandlängd

Skriv en java-funktion som returnar den totala längden snöre som behövs för paketet. Signaturen för metoden är:

```java
double calculateMinRibbonLength(String gift){
    //Din kod här
}
```

Längden på snöret får du genom formeln:

`Längd = 2*bredd + 2*längd + 4*höjd`

### Del 2: 

Skriv en ny java-funktion som returnar den totala längden snöre som behövs för paketet, inklusive extra längd så att man kan knyta en rosett. Metoden ska ta in en extra parameter `extraPercentage` som motsvarar den extra mängden snöre i procent. Signaturen för metoden är:

```java
double calculateMinRibbonLength(String gift, double extraPercentage){
    //Din kod här
}
```

### Del 3:

Skriv en java-funktion som beräknar och returnerar arean på den minsta mängden papper som behövs för att slå in presenten. Arean beräknar du med formeln:

 `AREA = 2 * längd * bredd + 2 * bredd * höjd + 2 * höjd * längd`
 
 Funktionen ska ha signaturen 
```java
double calculateMinPaperArea(String gift){
    //Din kod här
}
```

### Del 4:
Det är sällan man slår in ett paket så att man använder exakt den mängd papper man behöver. Istället utgår man från en rulle med presentpapper. Skriv en java-funktion som beräknar och returnar längden papper man behöver för att slå in en present utifrån en given paketpappersrulle. Funktionen ska alltså ha signaturen:

```java
double calculateMinPaperLength(String gift, double rollLength){
    //Din kod här
}
```

Metoden ska utgå från att välja den minsta dimensionen som man behöver "dra" pappret runt, så att rullens längd fortfarande räcker till de andra dimensionerna. Till exempel, utifrån bilden nedan, ska man välja två dimensioner som tillsammans skapar "WIDTH på pappret", som inte är längre än rullens längd, och den tredje dimensionen som skapar "HEIGHT" på pappret. Det är detta värde på "HEIGHT" som ska returnas.

![](https://hackmd.io/_uploads/ryPjuPNRh.png)



Är det inte möjligt att utifrån rullens längd slå in presenten ska funktionen returnera -1. 
