From 1b4586d385dc25a865afddd754ad5f6e111257da Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 08:39:56 +0000 Subject: [PATCH 1/3] Setting up GitHub Classroom Feedback From 6ac00657dc079d02f15303766f09654dd1fcc59b Mon Sep 17 00:00:00 2001 From: "PXLPERS\\20003575" Date: Tue, 11 Oct 2022 11:59:44 +0200 Subject: [PATCH 2/3] implementing robbery --- .../be/pxl/ja/citytrip/LondonAttractions.java | 4 +- .../java/be/pxl/ja/citytrip/VisitLondon.java | 4 +- src/main/java/be/pxl/ja/robbery/Demo.java | 25 +++++++++ src/main/java/be/pxl/ja/robbery/Knapsack.java | 29 +++++++++++ .../pxl/ja/robbery/KnapsackFullException.java | 8 +++ .../java/be/pxl/ja/robbery/KnapsackUtil.java | 6 +++ src/main/java/be/pxl/ja/robbery/Product.java | 52 +++++++++++++++++++ src/main/java/be/pxl/ja/robbery/Robbery.java | 4 +- .../java/be/pxl/ja/robbery/ProductTest.java | 30 +++++++++++ 9 files changed, 156 insertions(+), 6 deletions(-) create mode 100644 src/main/java/be/pxl/ja/robbery/Demo.java create mode 100644 src/main/java/be/pxl/ja/robbery/Knapsack.java create mode 100644 src/main/java/be/pxl/ja/robbery/KnapsackFullException.java create mode 100644 src/main/java/be/pxl/ja/robbery/KnapsackUtil.java create mode 100644 src/main/java/be/pxl/ja/robbery/Product.java create mode 100644 src/test/java/be/pxl/ja/robbery/ProductTest.java diff --git a/src/main/java/be/pxl/ja/citytrip/LondonAttractions.java b/src/main/java/be/pxl/ja/citytrip/LondonAttractions.java index d23ee80..bd99c43 100644 --- a/src/main/java/be/pxl/ja/citytrip/LondonAttractions.java +++ b/src/main/java/be/pxl/ja/citytrip/LondonAttractions.java @@ -5,7 +5,7 @@ public class LondonAttractions { - List items = new ArrayList<>(); + /*List items = new ArrayList<>(); public void add(Attraction item) { items.add(item); @@ -13,5 +13,5 @@ public void add(Attraction item) { public List getItems() { return items; - } + }*/ } diff --git a/src/main/java/be/pxl/ja/citytrip/VisitLondon.java b/src/main/java/be/pxl/ja/citytrip/VisitLondon.java index 821a651..e133848 100644 --- a/src/main/java/be/pxl/ja/citytrip/VisitLondon.java +++ b/src/main/java/be/pxl/ja/citytrip/VisitLondon.java @@ -2,7 +2,7 @@ public class VisitLondon { public static void main(String[] args) { - Knapsack knapsack = new Knapsack(2); + /* Knapsack knapsack = new Knapsack(2); LondonAttractions attractions = new LondonAttractions(); attractions.add(new Attraction("Westminster Abbey", 0.5, 7)); @@ -16,6 +16,6 @@ public static void main(String[] args) { System.out.println("\nList of attractions:"); for (Attraction attraction : knapsack.getItems()) { System.out.println(attraction); - } + }*/ } } \ No newline at end of file diff --git a/src/main/java/be/pxl/ja/robbery/Demo.java b/src/main/java/be/pxl/ja/robbery/Demo.java new file mode 100644 index 0000000..cf5e0d6 --- /dev/null +++ b/src/main/java/be/pxl/ja/robbery/Demo.java @@ -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 productList = Arrays.asList(p1, p2, p3, p4, p5); + Collections.sort(productList); + + for (Product p : productList) { + System.out.println(p); + } + + } +} diff --git a/src/main/java/be/pxl/ja/robbery/Knapsack.java b/src/main/java/be/pxl/ja/robbery/Knapsack.java new file mode 100644 index 0000000..9109253 --- /dev/null +++ b/src/main/java/be/pxl/ja/robbery/Knapsack.java @@ -0,0 +1,29 @@ +package be.pxl.ja.robbery; + +import java.util.ArrayList; +import java.util.List; + +public class Knapsack { + private int maximumCapacity; + private List items = new ArrayList<>(); + + public Knapsack(int maximumCapacity) { + this.maximumCapacity = maximumCapacity; + } + + public List getItems() { + return items; + } + + public double getCurrentWeight() { + return items.stream().mapToDouble(Product::getWeight).sum(); + } + + public void add(Product product) throws KnapsackFullException { + if (getCurrentWeight() + product.getWeight() <= maximumCapacity) { + items.add(product); + } else { + throw new KnapsackFullException("Product not allowed in knapsack."); + } + } +} diff --git a/src/main/java/be/pxl/ja/robbery/KnapsackFullException.java b/src/main/java/be/pxl/ja/robbery/KnapsackFullException.java new file mode 100644 index 0000000..e39638f --- /dev/null +++ b/src/main/java/be/pxl/ja/robbery/KnapsackFullException.java @@ -0,0 +1,8 @@ +package be.pxl.ja.robbery; + +public class KnapsackFullException extends Exception { // checked exception -> moet afgehandeld worden + + public KnapsackFullException(String message) { + super(message); + } +} diff --git a/src/main/java/be/pxl/ja/robbery/KnapsackUtil.java b/src/main/java/be/pxl/ja/robbery/KnapsackUtil.java new file mode 100644 index 0000000..64bff50 --- /dev/null +++ b/src/main/java/be/pxl/ja/robbery/KnapsackUtil.java @@ -0,0 +1,6 @@ +package be.pxl.ja.robbery; + +public class KnapsackUtil { + + +} diff --git a/src/main/java/be/pxl/ja/robbery/Product.java b/src/main/java/be/pxl/ja/robbery/Product.java new file mode 100644 index 0000000..d22abd1 --- /dev/null +++ b/src/main/java/be/pxl/ja/robbery/Product.java @@ -0,0 +1,52 @@ +package be.pxl.ja.robbery; + +public class Product implements Comparable{ + 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) { + System.out.println("Comparing " + this.getName() + " with " + product.getName()); + return Double.compare(product.price, this.price); + } +} diff --git a/src/main/java/be/pxl/ja/robbery/Robbery.java b/src/main/java/be/pxl/ja/robbery/Robbery.java index 5b04c30..1f080c4 100644 --- a/src/main/java/be/pxl/ja/robbery/Robbery.java +++ b/src/main/java/be/pxl/ja/robbery/Robbery.java @@ -2,7 +2,7 @@ public class Robbery { public static void main(String[] args) { - Knapsack knapsack = new Knapsack(35); + /*Knapsack knapsack = new Knapsack(35); Shop shop = new Shop(); shop.add(new Product("stereo", 30, 3000)); @@ -14,6 +14,6 @@ public static void main(String[] args) { System.out.println("\nList of products:"); for (Product product : knapsack.getItems()) { System.out.println(product); - } + }*/ } } \ No newline at end of file diff --git a/src/test/java/be/pxl/ja/robbery/ProductTest.java b/src/test/java/be/pxl/ja/robbery/ProductTest.java new file mode 100644 index 0000000..ee1afef --- /dev/null +++ b/src/test/java/be/pxl/ja/robbery/ProductTest.java @@ -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)); + } +} From 1da230b3bff0e8520266c1f7a94711783a4abfd2 Mon Sep 17 00:00:00 2001 From: "PXLPERS\\20003575" Date: Tue, 18 Oct 2022 12:11:31 +0200 Subject: [PATCH 3/3] finish generic implementation --- .../java/be/pxl/ja/citytrip/Attraction.java | 58 +++++++++++++++++++ .../be/pxl/ja/citytrip/LondonAttractions.java | 4 +- .../java/be/pxl/ja/citytrip/VisitLondon.java | 9 ++- .../java/be/pxl/ja/knapsack/Knapsack.java | 29 ++++++++++ .../KnapsackFullException.java | 2 +- .../java/be/pxl/ja/knapsack/KnapsackItem.java | 5 ++ .../java/be/pxl/ja/knapsack/KnapsackUtil.java | 23 ++++++++ src/main/java/be/pxl/ja/robbery/Knapsack.java | 29 ---------- .../java/be/pxl/ja/robbery/KnapsackUtil.java | 6 -- src/main/java/be/pxl/ja/robbery/Product.java | 5 +- src/main/java/be/pxl/ja/robbery/Robbery.java | 17 ++++-- src/main/java/be/pxl/ja/robbery/Shop.java | 2 +- .../be/pxl/ja/citytrip/AttractionTest.java | 29 ++++++++++ .../java/be/pxl/ja/knapsack/KnapsackTest.java | 24 ++++++++ 14 files changed, 194 insertions(+), 48 deletions(-) create mode 100644 src/main/java/be/pxl/ja/citytrip/Attraction.java create mode 100644 src/main/java/be/pxl/ja/knapsack/Knapsack.java rename src/main/java/be/pxl/ja/{robbery => knapsack}/KnapsackFullException.java (87%) create mode 100644 src/main/java/be/pxl/ja/knapsack/KnapsackItem.java create mode 100644 src/main/java/be/pxl/ja/knapsack/KnapsackUtil.java delete mode 100644 src/main/java/be/pxl/ja/robbery/Knapsack.java delete mode 100644 src/main/java/be/pxl/ja/robbery/KnapsackUtil.java create mode 100644 src/test/java/be/pxl/ja/citytrip/AttractionTest.java create mode 100644 src/test/java/be/pxl/ja/knapsack/KnapsackTest.java diff --git a/src/main/java/be/pxl/ja/citytrip/Attraction.java b/src/main/java/be/pxl/ja/citytrip/Attraction.java new file mode 100644 index 0000000..adce530 --- /dev/null +++ b/src/main/java/be/pxl/ja/citytrip/Attraction.java @@ -0,0 +1,58 @@ +package be.pxl.ja.citytrip; + +import be.pxl.ja.knapsack.KnapsackItem; + +public class Attraction implements Comparable, 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; + } +} diff --git a/src/main/java/be/pxl/ja/citytrip/LondonAttractions.java b/src/main/java/be/pxl/ja/citytrip/LondonAttractions.java index bd99c43..d23ee80 100644 --- a/src/main/java/be/pxl/ja/citytrip/LondonAttractions.java +++ b/src/main/java/be/pxl/ja/citytrip/LondonAttractions.java @@ -5,7 +5,7 @@ public class LondonAttractions { - /*List items = new ArrayList<>(); + List items = new ArrayList<>(); public void add(Attraction item) { items.add(item); @@ -13,5 +13,5 @@ public void add(Attraction item) { public List getItems() { return items; - }*/ + } } diff --git a/src/main/java/be/pxl/ja/citytrip/VisitLondon.java b/src/main/java/be/pxl/ja/citytrip/VisitLondon.java index e133848..f25ae73 100644 --- a/src/main/java/be/pxl/ja/citytrip/VisitLondon.java +++ b/src/main/java/be/pxl/ja/citytrip/VisitLondon.java @@ -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 knapsack = new Knapsack<>(2); LondonAttractions attractions = new LondonAttractions(); attractions.add(new Attraction("Westminster Abbey", 0.5, 7)); @@ -11,11 +14,11 @@ 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()) { System.out.println(attraction); - }*/ + } } } \ No newline at end of file diff --git a/src/main/java/be/pxl/ja/knapsack/Knapsack.java b/src/main/java/be/pxl/ja/knapsack/Knapsack.java new file mode 100644 index 0000000..0bd566a --- /dev/null +++ b/src/main/java/be/pxl/ja/knapsack/Knapsack.java @@ -0,0 +1,29 @@ +package be.pxl.ja.knapsack; + +import java.util.ArrayList; +import java.util.List; + +public class Knapsack { + private int maximumCapacity; + private List items = new ArrayList<>(); + + public Knapsack(int maximumCapacity) { + this.maximumCapacity = maximumCapacity; + } + + public List 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."); + } + } +} diff --git a/src/main/java/be/pxl/ja/robbery/KnapsackFullException.java b/src/main/java/be/pxl/ja/knapsack/KnapsackFullException.java similarity index 87% rename from src/main/java/be/pxl/ja/robbery/KnapsackFullException.java rename to src/main/java/be/pxl/ja/knapsack/KnapsackFullException.java index e39638f..478857d 100644 --- a/src/main/java/be/pxl/ja/robbery/KnapsackFullException.java +++ b/src/main/java/be/pxl/ja/knapsack/KnapsackFullException.java @@ -1,4 +1,4 @@ -package be.pxl.ja.robbery; +package be.pxl.ja.knapsack; public class KnapsackFullException extends Exception { // checked exception -> moet afgehandeld worden diff --git a/src/main/java/be/pxl/ja/knapsack/KnapsackItem.java b/src/main/java/be/pxl/ja/knapsack/KnapsackItem.java new file mode 100644 index 0000000..d9c89c5 --- /dev/null +++ b/src/main/java/be/pxl/ja/knapsack/KnapsackItem.java @@ -0,0 +1,5 @@ +package be.pxl.ja.knapsack; + +public interface KnapsackItem { + double getWeight(); +} diff --git a/src/main/java/be/pxl/ja/knapsack/KnapsackUtil.java b/src/main/java/be/pxl/ja/knapsack/KnapsackUtil.java new file mode 100644 index 0000000..da1b3ac --- /dev/null +++ b/src/main/java/be/pxl/ja/knapsack/KnapsackUtil.java @@ -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 > void fill(Knapsack knapsack, List items) { + Collections.sort(items); + for (T item: items) { + try { + knapsack.add(item); + } catch (KnapsackFullException e) { + System.err.println(e.getMessage()); + } + + } + } + +} diff --git a/src/main/java/be/pxl/ja/robbery/Knapsack.java b/src/main/java/be/pxl/ja/robbery/Knapsack.java deleted file mode 100644 index 9109253..0000000 --- a/src/main/java/be/pxl/ja/robbery/Knapsack.java +++ /dev/null @@ -1,29 +0,0 @@ -package be.pxl.ja.robbery; - -import java.util.ArrayList; -import java.util.List; - -public class Knapsack { - private int maximumCapacity; - private List items = new ArrayList<>(); - - public Knapsack(int maximumCapacity) { - this.maximumCapacity = maximumCapacity; - } - - public List getItems() { - return items; - } - - public double getCurrentWeight() { - return items.stream().mapToDouble(Product::getWeight).sum(); - } - - public void add(Product product) throws KnapsackFullException { - if (getCurrentWeight() + product.getWeight() <= maximumCapacity) { - items.add(product); - } else { - throw new KnapsackFullException("Product not allowed in knapsack."); - } - } -} diff --git a/src/main/java/be/pxl/ja/robbery/KnapsackUtil.java b/src/main/java/be/pxl/ja/robbery/KnapsackUtil.java deleted file mode 100644 index 64bff50..0000000 --- a/src/main/java/be/pxl/ja/robbery/KnapsackUtil.java +++ /dev/null @@ -1,6 +0,0 @@ -package be.pxl.ja.robbery; - -public class KnapsackUtil { - - -} diff --git a/src/main/java/be/pxl/ja/robbery/Product.java b/src/main/java/be/pxl/ja/robbery/Product.java index d22abd1..5e5c3d7 100644 --- a/src/main/java/be/pxl/ja/robbery/Product.java +++ b/src/main/java/be/pxl/ja/robbery/Product.java @@ -1,6 +1,8 @@ package be.pxl.ja.robbery; -public class Product implements Comparable{ +import be.pxl.ja.knapsack.KnapsackItem; + +public class Product implements Comparable, KnapsackItem { private String name; private double weight; private double price; @@ -46,7 +48,6 @@ public String toString() { @Override public int compareTo(Product product) { - System.out.println("Comparing " + this.getName() + " with " + product.getName()); return Double.compare(product.price, this.price); } } diff --git a/src/main/java/be/pxl/ja/robbery/Robbery.java b/src/main/java/be/pxl/ja/robbery/Robbery.java index 1f080c4..38410c8 100644 --- a/src/main/java/be/pxl/ja/robbery/Robbery.java +++ b/src/main/java/be/pxl/ja/robbery/Robbery.java @@ -1,19 +1,28 @@ 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 woorden = new ArrayList<>(); + Knapsack 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()) { System.out.println(product); - }*/ + } } } \ No newline at end of file diff --git a/src/main/java/be/pxl/ja/robbery/Shop.java b/src/main/java/be/pxl/ja/robbery/Shop.java index 4f7a304..4572be0 100644 --- a/src/main/java/be/pxl/ja/robbery/Shop.java +++ b/src/main/java/be/pxl/ja/robbery/Shop.java @@ -5,7 +5,7 @@ public class Shop { - List items = new ArrayList<>(); + private List items = new ArrayList<>(); public void add(Product item) { items.add(item); diff --git a/src/test/java/be/pxl/ja/citytrip/AttractionTest.java b/src/test/java/be/pxl/ja/citytrip/AttractionTest.java new file mode 100644 index 0000000..93bdeb8 --- /dev/null +++ b/src/test/java/be/pxl/ja/citytrip/AttractionTest.java @@ -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); + } +} diff --git a/src/test/java/be/pxl/ja/knapsack/KnapsackTest.java b/src/test/java/be/pxl/ja/knapsack/KnapsackTest.java new file mode 100644 index 0000000..c545b17 --- /dev/null +++ b/src/test/java/be/pxl/ja/knapsack/KnapsackTest.java @@ -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 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))); + } +}