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
58 changes: 58 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,58 @@
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;
}

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.getRating() - this.getRating();
}

@Override
public double getWeight() {
return time;
}
}
7 changes: 5 additions & 2 deletions src/main/java/be/pxl/ja/citytrip/VisitLondon.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package be.pxl.ja.citytrip;

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

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

attractions.add(new Attraction("Westminster Abbey", 0.5, 7));
Expand All @@ -11,7 +14,7 @@ public static void main(String[] args) {
attractions.add(new Attraction("British Museum", 1.5, 9));
attractions.add(new Attraction("St. Paul's Cathedral", 0.5, 8));

KnapsackUtil.fill(knapsack, attractions);
KnapsackUtil.fill(knapsack, attractions.getItems());

System.out.println("\nList of attractions:");
for (Attraction attraction : knapsack.getItems()) {
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 maximumCapacity;
private List<T> items = new ArrayList<>();

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

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

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

public void add(T item) throws KnapsackFullException {
if (getCurrentWeight() + item.getWeight() <= maximumCapacity) {
items.add(item);
} else {
throw new KnapsackFullException("Product not allowed in knapsack.");
}
}
}
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 -> moet afgehandeld worden

public KnapsackFullException(String message) {
super(message);
}
}
5 changes: 5 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,5 @@
package be.pxl.ja.knapsack;

public interface KnapsackItem {
double getWeight();
}
23 changes: 23 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,23 @@
package be.pxl.ja.knapsack;

import be.pxl.ja.robbery.Product;
import be.pxl.ja.robbery.Shop;

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

public class KnapsackUtil {

public static <T extends KnapsackItem & Comparable<T>> void fill(Knapsack<T> knapsack, List<T> items) {
Collections.sort(items);
for (T item: items) {
try {
knapsack.add(item);
} catch (KnapsackFullException e) {
System.err.println(e.getMessage());
}

}
}

}
25 changes: 25 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,25 @@
package be.pxl.ja.robbery;

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

public class Demo {

public static void main(String[] args) {
Product p1 = new Product("p1", 15, 5.5);
Product p2 = new Product("p2", 15, 7.5);
Product p3 = new Product("p3", 15, 1);
Product p4 = new Product("p4", 15, 12.8);
Product p5 = new Product("p5", 15, 1);

List<Product> productList = Arrays.asList(p1, p2, p3, p4, p5);
Collections.sort(productList);

for (Product p : productList) {
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 weight;
private double price;

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

public String getName() {
return name;
}

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

public double getWeight() {
return weight;
}

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

public double getPrice() {
return price;
}

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

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

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

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

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("stereo", 15, 1800));
shop.add(new Product("television", 7, 850));
shop.add(new Product("dvd-player", 8, 1850));
shop.add(new Product("laptop", 20, 2000));
shop.add(new Product("guitar", 15, 1500));

KnapsackUtil.fill(knapsack, shop);
KnapsackUtil.fill(knapsack, shop.getItems());

System.out.println("\nList of products:");
for (Product product : knapsack.getItems()) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/be/pxl/ja/robbery/Shop.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

public class Shop {

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

public void add(Product item) {
items.add(item);
Expand Down
29 changes: 29 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,29 @@
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 compareToReturnsZeroIfAttractionsHaveSameRating() {
Attraction attraction1 = new Attraction("a1", 0.5, 8);
Attraction attraction2 = new Attraction("a2", 1, 8);
assertEquals(0, attraction1.compareTo(attraction2));
}

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

@Test
public void compareToReturnsPositiveValueIfAttractionHasLowerRating() {
Attraction attraction1 = new Attraction("a1", 0.5, 5);
Attraction attraction2 = new Attraction("a2", 1, 8);
assertTrue(attraction1.compareTo(attraction2) > 0);
}
}
24 changes: 24 additions & 0 deletions src/test/java/be/pxl/ja/knapsack/KnapsackTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package be.pxl.ja.knapsack;

import be.pxl.ja.robbery.Product;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class KnapsackTest {

private Knapsack<Product> knapsack;

@BeforeEach
public void init() throws KnapsackFullException {
knapsack = new Knapsack<>(35);
knapsack.add(new Product("stereo", 12, 370));
knapsack.add(new Product("laptop", 3, 1200));
}

@Test
public void knapsackFullExceptionIsThrownWhenMaximumCapacityExceeded() {
Assertions.assertThrows(KnapsackFullException.class,
() -> knapsack.add(new Product("laspost", 50, 2500)));
}
}
30 changes: 30 additions & 0 deletions src/test/java/be/pxl/ja/robbery/ProductTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package be.pxl.ja.robbery;

import org.junit.jupiter.api.Test;

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

public class ProductTest {

@Test
public void compareToReturnsZeroWhenProductsHaveSamePrice() {
Product p1 = new Product("p1", 12.5, 15.5);
Product p2 = new Product("p2", 20, 15.5);
assertEquals(0, p1.compareTo(p2));
assertEquals(0, p2.compareTo(p1));
}

@Test
public void compareToReturnsNegativeValueWhenProductIsExpensive() {
Product p1 = new Product("p1", 12.5, 20.5);
Product p2 = new Product("p2", 20, 15.5);
assertEquals(-1, p1.compareTo(p2));
}

@Test
public void compareToReturnsPositiveValueWhenProductIsCheaper() {
Product p1 = new Product("p1", 12.5, 15.5);
Product p2 = new Product("p2", 20, 32.8);
assertEquals(1, p1.compareTo(p2));
}
}