Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Deze klasse is reeds gegeven en compleet.
### KnapsackUtil.java
Deze klasse staat in voor het greedy algoritme.
De klasse bevat 1 public static methode fill met een knapsack en een Shop inventaris als argument.
In de fill-methode worden eerst alle producten uit de shop gesorteerd (gebruik hiervoor een methode uit de klasse Collections!).
In de fill-methode worden eerst alle producten uit de pool gesorteerd (gebruik hiervoor een methode uit de klasse Collections!).
Vervolgens probeer je deze gesorteerde producten 1 voor 1 toe te voegen aan de Knapsack.

### Robbery.java (main)
Expand All @@ -65,7 +65,7 @@ Cannot add product [laptop]. Maximum capacity reached.
List of products:
Product{name='stereo', weight=30.0, price=3000.0}
```
Voeg ook eens extra producten toe in de shop en/of pas de capaciteit van de Knapsack eens aan.
Voeg ook eens extra producten toe in de pool en/of pas de capaciteit van de Knapsack eens aan.

### EXTRA: KnapsackUtilTest.java
Voorzie unittesten voor de fill methode.
Expand Down
60 changes: 60 additions & 0 deletions src/main/java/be/pxl/ja/citytrip/Attraction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package be.pxl.ja.citytrip;

import be.pxl.ja.knapsack.KnapsackItem;

public class Attraction implements Comparable<Attraction>, KnapsackItem {
private String name;
private double time;
private int rating;

public Attraction(String name, double time, int rating) {
this.name = name;
this.time = time;
this.rating = rating;
}


public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getTime() {
return time;
}

@Override
public double getWeight() {
return time;
}


public void setTime(double time) {
this.time = time;
}

public int getRating() {
return rating;
}

public void setRating(int rating) {
this.rating = rating;
}

@Override
public String toString() {
return "Attraction{" +
"name='" + name + '\'' +
", time=" + time +
", rating=" + rating +
'}';
}

@Override
public int compareTo(Attraction attraction) {
return attraction.rating - this.rating;
}
}
17 changes: 0 additions & 17 deletions src/main/java/be/pxl/ja/citytrip/LondonAttractions.java

This file was deleted.

8 changes: 6 additions & 2 deletions src/main/java/be/pxl/ja/citytrip/VisitLondon.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package be.pxl.ja.citytrip;

import be.pxl.ja.knapsack.Knapsack;
import be.pxl.ja.knapsack.Pool;
import be.pxl.ja.knapsack.KnapsackUtil;

public class VisitLondon {
public static void main(String[] args) {
Knapsack knapsack = new Knapsack(2);
LondonAttractions attractions = new LondonAttractions();
Knapsack<Attraction> knapsack = new Knapsack<>(2);
Pool<Attraction> attractions = new Pool<>();

attractions.add(new Attraction("Westminster Abbey", 0.5, 7));
attractions.add(new Attraction("Globe Theater", 0.5, 6));
Expand Down
29 changes: 29 additions & 0 deletions src/main/java/be/pxl/ja/knapsack/Knapsack.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package be.pxl.ja.knapsack;

import java.util.ArrayList;
import java.util.List;

public class Knapsack<T extends KnapsackItem> {
private int maxCapacity;
private List<T> items = new ArrayList<>();

public Knapsack(int maxCapacity) {
this.maxCapacity = maxCapacity;
}

public double getCurrentWeight() {
return items.stream().mapToDouble(KnapsackItem::getWeight).sum();
}

public void add(T item) throws KnapsackFullException{
if (getCurrentWeight() + item.getWeight() > maxCapacity) {
throw new KnapsackFullException("Product " + item.getName() + " past niet in de knapsack.");
}
items.add(item);
}

public List<T> getItems() {
return items;
}

}
8 changes: 8 additions & 0 deletions src/main/java/be/pxl/ja/knapsack/KnapsackFullException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package be.pxl.ja.knapsack;

public class KnapsackFullException extends Exception { // checked exception

public KnapsackFullException(String message) {
super(message);
}
}
6 changes: 6 additions & 0 deletions src/main/java/be/pxl/ja/knapsack/KnapsackItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package be.pxl.ja.knapsack;

public interface KnapsackItem {
double getWeight();
String getName();
}
24 changes: 24 additions & 0 deletions src/main/java/be/pxl/ja/knapsack/KnapsackUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package be.pxl.ja.knapsack;

import be.pxl.ja.knapsack.Knapsack;
import be.pxl.ja.knapsack.KnapsackFullException;
import be.pxl.ja.knapsack.KnapsackItem;
import be.pxl.ja.knapsack.Pool;

import java.util.Collections;
import java.util.List;

public class KnapsackUtil {

public static <T extends KnapsackItem & Comparable<T>> void fill(Knapsack<T> knapsack, Pool<T> pool) {
List<T> items = pool.getItems();
Collections.sort(items); // gesorteerd op prijs - duurste eerst
for (T item : items) {
try {
knapsack.add(item);
} catch (KnapsackFullException e) {
System.err.println(e.getMessage());
}
}
}
}
19 changes: 19 additions & 0 deletions src/main/java/be/pxl/ja/knapsack/Pool.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package be.pxl.ja.knapsack;

import java.util.ArrayList;
import java.util.List;

public class Pool<T> {

private List<T> items = new ArrayList<>();

public void add(T item) {
items.add(item);
}

public List<T> getItems() {
return items;
}


}
21 changes: 21 additions & 0 deletions src/main/java/be/pxl/ja/robbery/Demo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package be.pxl.ja.robbery;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo {

public static void main(String[] args) {
List<Product> products = new ArrayList<>();
products.add(new Product("p1", 12.5, 8.5));
products.add(new Product("p2", 8.5, 8.5));
products.add(new Product("p3", 4.5, 8.5));
products.add(new Product("p4", 17.5, 8.5));
products.add(new Product("p5", 11.5, 8.5));
Collections.sort(products);
for (Product p: products) {
System.out.println(p);
}
}
}
53 changes: 53 additions & 0 deletions src/main/java/be/pxl/ja/robbery/Product.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package be.pxl.ja.robbery;

import be.pxl.ja.knapsack.KnapsackItem;

public class Product implements Comparable<Product>, KnapsackItem {
private String name;
private double price;
private double weight;

public Product(String name, double price, double weight) {
this.name = name;
this.price = price;
this.weight = weight;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

public double getWeight() {
return weight;
}

public void setWeight(double weight) {
this.weight = weight;
}

@Override
public String toString() {
return "Product{" +
"name='" + name + '\'' +
", price=" + price +
", weight=" + weight +
'}';
}

@Override
public int compareTo(Product product) {
return Double.compare(product.getPrice(), this.getPrice());
}
}
18 changes: 13 additions & 5 deletions src/main/java/be/pxl/ja/robbery/Robbery.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
package be.pxl.ja.robbery;

import be.pxl.ja.knapsack.Knapsack;
import be.pxl.ja.knapsack.KnapsackUtil;
import be.pxl.ja.knapsack.Pool;

import java.util.ArrayList;
import java.util.List;

public class Robbery {
public static void main(String[] args) {
Knapsack knapsack = new Knapsack(35);
List<String> woorden = new ArrayList<>();
Knapsack<Product> knapsack = new Knapsack<>(35);

Shop shop = new Shop();
shop.add(new Product("stereo", 30, 3000));
shop.add(new Product("laptop", 20, 2000));
shop.add(new Product("guitar", 15, 1500));
Pool<Product> shop = new Pool<>();
shop.add(new Product("stereo", 3000, 30));
shop.add(new Product("laptop", 2000, 20));
shop.add(new Product("guitar", 1500, 15));

KnapsackUtil.fill(knapsack, shop);

Expand Down
19 changes: 0 additions & 19 deletions src/main/java/be/pxl/ja/robbery/Shop.java

This file was deleted.

30 changes: 30 additions & 0 deletions src/test/java/be/pxl/ja/citytrip/AttractionTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package be.pxl.ja.citytrip;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class AttractionTest {

@Test
public void compareToReturnsZeroForAttractionsWithSameRating() {
Attraction attraction1 = new Attraction("attraction1", 0.5, 5);
Attraction attraction2 = new Attraction("attraction2", 1, 5);
assertEquals(0, attraction1.compareTo(attraction2));
}

@Test
public void compareToReturnsNegativeValueForAttractionWithHigherRating() {
Attraction attraction1 = new Attraction("attraction1", 0.5, 7);
Attraction attraction2 = new Attraction("attraction2", 1, 5);
assertTrue(attraction1.compareTo(attraction2) < 0);
}

@Test
public void compareToReturnsPositiveValueForAttractionWithLowerRating() {
Attraction attraction1 = new Attraction("attraction1", 0.5, 3);
Attraction attraction2 = new Attraction("attraction2", 1, 5);
assertTrue(attraction1.compareTo(attraction2) > 0);
}
}
Loading