From eb87e6061f25f30ccf48c1fe0381a116771f595d Mon Sep 17 00:00:00 2001 From: Chloe Christine Fontenot Date: Sun, 19 Oct 2025 21:31:12 -0500 Subject: [PATCH] update --- .../Printed HTMLs/Bicycle.html | 298 ++++++++++++++++++ .../Printed HTMLs/BikeStores.html | 298 ++++++++++++++++++ .../Printed HTMLs/ChildBike.html | 84 +++++ .../Printed HTMLs/Details.html | 81 +++++ .../Printed HTMLs/MountainBike.html | 86 +++++ .../Printed HTMLs/SpeedBike.html | 94 ++++++ .../mp4_calebfontenot/BikeStores.java | 6 +- Semester 2/ZIPs/MP4_CalebFontenot.zip | Bin 9028 -> 22014 bytes 8 files changed, 944 insertions(+), 3 deletions(-) create mode 100644 Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/Bicycle.html create mode 100644 Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/BikeStores.html create mode 100644 Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/ChildBike.html create mode 100644 Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/Details.html create mode 100644 Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/MountainBike.html create mode 100644 Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/SpeedBike.html diff --git a/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/Bicycle.html b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/Bicycle.html new file mode 100644 index 0000000..c219a7d --- /dev/null +++ b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/Bicycle.html @@ -0,0 +1,298 @@ + + + +BikeStores.java + + + + +
/home/caleb/ASDV-Java/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/BikeStores.java
+
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.calebfontenot.mp4_calebfontenot;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ *
+ * @author caleb
+ */
+public class BikeStores {
+
+    ArrayList<ArrayList<Bicycle>> storesOfBikes = new ArrayList<ArrayList<Bicycle>>();
+
+    /**
+     * Add a bike at storeNumber ( i.e. the storeNumber indicates the store)
+     *
+     * @param storeNumber which store
+     * @param b the bike to add
+     * @return true if the bike added, false if the storeNumber is invalid or b is null.
+     */
+    public BikeStores() {
+        for (int i = 0; i < 3; i++) {
+            storesOfBikes.add(new ArrayList<Bicycle>());
+        }
+    }
+
+    public boolean addBike(int storeNumber, Bicycle b) {
+        if (storeNumber < 0 || storeNumber > this.storesOfBikes.size() - 1) {
+            return false;
+        }
+        if (b == null) {
+            return false;
+        }
+        System.out.println("Attempting to add " + b + " to store at index " + storeNumber);
+        //Unpack array
+        ArrayList<Bicycle> bikesInInventory = storesOfBikes.get(storeNumber);
+        bikesInInventory.add(b);
+
+        // Repack array
+        storesOfBikes.set(storeNumber, bikesInInventory);
+        System.out.println("success!");
+        return true;
+    }
+
+    /**
+     * Removes a bike at a specific store.
+     *
+     * @param storeNumber the store that has the bike
+     * @param b the bike to be removed
+     * @return true of the bike is removed, false if the bike does not exist, or bike is null.
+     */
+    public boolean removeBike(int storeNumber, Bicycle b) {
+        if (storeNumber < 0 || storeNumber > this.storesOfBikes.size() - 1) {
+            return false;
+        }
+        if (b == null) {
+            return false;
+        }
+        System.out.println("Attempting to remove " + b + " to store at index " + storeNumber);
+        // Remove bike from array.
+        ArrayList<Bicycle> bikesInInventory = storesOfBikes.get(storeNumber);
+        bikesInInventory.remove(b); //YEET
+        System.out.println("success!");
+        return true;
+    }
+
+    /**
+     * Prints the indexes before each bike , one store per line
+     *
+     * @param stores stores of bikes
+     */
+    public static void print(ArrayList<ArrayList<Bicycle>> stores) {
+        for (int i = 0; i < stores.size(); ++i) {
+            System.out.println("---------- " + "printing row " + (i + 1) + " ----------");
+            for (int j = 0; j < stores.get(i).size(); ++j) {
+                System.out.println(stores.get(i).get(j) + " ");
+
+            }
+        }
+    }
+
+    public static void printSingle(ArrayList<Bicycle> stores) {
+        System.out.println("----------" + "printSingle" + "----------");
+        for (int j = 0; j < stores.size(); ++j) {
+            System.out.println(stores.get(j) + " ");
+        }
+
+    }
+
+    public static void printRank(ArrayList<Bicycle> stores) {
+        System.out.println("----------" + "printRank" + "----------");
+        for (int j = 0; j < stores.size(); ++j) {
+            System.out.println(stores.get(j) + " " + stores.get(j).calculatedDetails().getRank());
+        }
+
+    }
+
+    /**
+     * Groups bikes by type ans sorts them by the ranking of Details. There will be three groups and each group stored in descending order by rank.
+     *
+     * @param stores the stores of bikes
+     * @return a newly created ArrayList<ArrayList<Bicycle>> with the bikes sorted.
+     */
+    public static ArrayList<ArrayList<Bicycle>> sortBikesByType(final ArrayList<ArrayList<Bicycle>> stores) {
+        ArrayList<ArrayList<Bicycle>> newStore = new ArrayList<ArrayList<Bicycle>>();
+        // group arrayLists
+        ArrayList<Bicycle> mountainBikes = new ArrayList<Bicycle>();
+        ArrayList<Bicycle> speedBikes = new ArrayList<Bicycle>();
+        ArrayList<Bicycle> childBikes = new ArrayList<Bicycle>();
+        System.out.println("---------- " + "grouping by bike type... " + " ----------");
+        for (int i = 0; i < stores.size(); ++i) {
+            for (int j = 0; j < stores.get(i).size(); ++j) {
+                // System.out.println(stores.get(i).get(j).calculatedDetails().getRank() + " ");
+                Bicycle bike = stores.get(i).get(j);
+                if (bike instanceof ChildBike) {
+                    childBikes.add(bike);
+                } else if (bike instanceof MountainBike) {
+                    mountainBikes.add(bike);
+                } else if (bike instanceof SpeedBike) {
+                    speedBikes.add(bike);
+                }
+            }
+        }
+        //printRank(childBikes);
+        //printRank(mountainBikes);
+        //printRank(speedBikes);
+        System.out.println("sorting...");
+        sortType(childBikes);
+        sortType(mountainBikes);
+        sortType(speedBikes);
+        System.out.println("sorted");
+        //printRank(childBikes);
+        //printRank(mountainBikes);
+        //printRank(speedBikes);
+        newStore.add(childBikes);
+        newStore.add(mountainBikes);
+        newStore.add(speedBikes);
+        return newStore;
+    }
+
+    private static void sortType(ArrayList<Bicycle> arrList) {
+        for (int x = 0; x < arrList.size(); ++x) {
+            for (int i = 0; i < arrList.size(); ++i) {
+                for (int j = i + 1; j < arrList.size(); ++j) {
+                    int compare1 = arrList.get(i).calculatedDetails().getRank();
+                    int compare2 = arrList.get(j).calculatedDetails().getRank();
+                    if (compare1 < compare2) {
+                        Bicycle tmp = arrList.get(i);
+                        arrList.set(i, arrList.get(j));
+                        arrList.set(j, tmp);
+                    }
+                }
+            }
+        }
+    }
+
+    public static void print(Object[] arr) {
+        for (Object o : arr) {
+            System.out.println(o);
+        }
+    }
+
+    public static void print(Object[][] arr) {
+        for (int i = 0; i < arr.length; i++) {
+            System.out.println("---------- " + "printing row " + (i + 1) + " ----------");
+            print(arr[i]);
+
+        }
+    }
+
+    /**
+     * Returns a 2D array containing all the bikes in the store in proper sequence (from first to last element). Store 0 with all its bikes, store 1 with all its bikes, and so on.
+     *
+     * @return a 2D array of all stores with bikes.
+     */
+    public Object[][] toArray() {
+        Object[][] arr = new Object[storesOfBikes.size()][];
+        for (int i = 0; i < storesOfBikes.size(); i++) {
+            arr[i] = storesOfBikes.toArray();
+        }
+        return arr;
+    }
+
+    /**
+     * Retains only the Bicycles in the stores that are contained in the specified collection. In other words, removes from this list all of bikes that are not contained in the specified location.
+     *
+     * @param c the bikes to be removed
+     * @return true if any store changed as a result of the call.
+     */
+    public boolean retainAll(Collection<Bicycle> c) {
+        boolean modified = false;
+        for (int i = storesOfBikes.size() - 1; i >= 0; i--) {
+            ArrayList<Bicycle> bikes = storesOfBikes.get(i);
+            for (int j = bikes.size() - 1; j >= 0; j--) {
+                Bicycle bike = bikes.get(j);
+                if (!c.contains(bike)) {
+                    bikes.remove(j);
+                    System.out.println("Removing " + bike);
+                    modified = true;
+                }
+            }
+        }
+        System.out.println("Bikes to remove:");
+        printSingle((ArrayList<Bicycle>) c);
+        return modified;
+    }
+
+    public static void main(String[] args) {
+        BikeStores bikes = new BikeStores();
+        //add 5 bikes to store 0 ( 2 speedBikes, 2 mountain 1 child)
+        bikes.addBike(0, new SpeedBike(4, 3, 10, 40));
+        bikes.addBike(0, new SpeedBike(1, 2, 10, 30));
+        bikes.addBike(0, new MountainBike(1, 2, 3, 20));
+        bikes.addBike(0, new MountainBike(3, 2, 10, 25));
+        bikes.addBike(0, new ChildBike(false, 1, 1, 10));
+        //add 5 bikes to store 1 (  3 speedbikes, 1 mountain 1 child)
+        bikes.addBike(1, new SpeedBike(10, 4, 10, 20));
+        bikes.addBike(1, new SpeedBike(0, 2, 10, 50));
+        bikes.addBike(1, new SpeedBike(3, 2, 10, 38));
+        bikes.addBike(1, new MountainBike(1, 3, 5, 44));
+        bikes.addBike(1, new ChildBike(true, 1, 1, 15));
+        //add 6 bikes to store 2 (  2 speedBikes, 2 mountain 2 child )
+        bikes.addBike(2, new SpeedBike(7, 10, 20, 25));
+        bikes.addBike(2, new SpeedBike(0, 8, 40, 55)); // retainAll should match this one
+        bikes.addBike(2, new MountainBike(2, 3, 15, 33));
+        bikes.addBike(2, new MountainBike(1, 3, 15, 24));
+        bikes.addBike(2, new ChildBike(true, 1, 2, 20));  
+        bikes.addBike(2, new ChildBike(false, 1, 1, 18));// retainAll should match this one
+        //remove one child bike from store 2
+        bikes.removeBike(2, new ChildBike(true, 1, 2, 20)); // Java reuses the object created earlier since it has the same values.
+        //PRINT
+        print(bikes.storesOfBikes);
+        //SORT
+        ArrayList<ArrayList<Bicycle>> sortedBikes = sortBikesByType(bikes.storesOfBikes);
+        //PRINT what the method return
+        System.out.println("SORTED BIKES");
+        print(sortedBikes);
+        //PRINT the original store
+        System.out.println("ORIGINAL STORE ARRAYLIST");
+        print(bikes.storesOfBikes);
+        // ---------- TEST retainAll ----------
+        System.out.println("Testing retainAll();...");
+        Collection<Bicycle> c1 = new ArrayList<Bicycle>();
+        c1.add(new SpeedBike(0, 8, 40, 55));
+        c1.add(new ChildBike(false, 1, 1, 18));
+        Bicycle b1 = bikes.storesOfBikes.get(2).get(1);
+        Bicycle b2 = bikes.storesOfBikes.get(2).get(4);
+        Bicycle b3 = ((ArrayList<Bicycle>) c1).get(0);
+        Bicycle b4 = ((ArrayList<Bicycle>) c1).get(1);
+        
+        System.out.println(b1.equals(b3) + " " + b2.equals(b4));
+        bikes.retainAll(c1);
+        print(bikes.storesOfBikes);
+
+    }
+
+}
+
+class NotABike {
+
+}
+
+
+ diff --git a/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/BikeStores.html b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/BikeStores.html new file mode 100644 index 0000000..c219a7d --- /dev/null +++ b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/BikeStores.html @@ -0,0 +1,298 @@ + + + +BikeStores.java + + + + +
/home/caleb/ASDV-Java/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/BikeStores.java
+
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.calebfontenot.mp4_calebfontenot;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ *
+ * @author caleb
+ */
+public class BikeStores {
+
+    ArrayList<ArrayList<Bicycle>> storesOfBikes = new ArrayList<ArrayList<Bicycle>>();
+
+    /**
+     * Add a bike at storeNumber ( i.e. the storeNumber indicates the store)
+     *
+     * @param storeNumber which store
+     * @param b the bike to add
+     * @return true if the bike added, false if the storeNumber is invalid or b is null.
+     */
+    public BikeStores() {
+        for (int i = 0; i < 3; i++) {
+            storesOfBikes.add(new ArrayList<Bicycle>());
+        }
+    }
+
+    public boolean addBike(int storeNumber, Bicycle b) {
+        if (storeNumber < 0 || storeNumber > this.storesOfBikes.size() - 1) {
+            return false;
+        }
+        if (b == null) {
+            return false;
+        }
+        System.out.println("Attempting to add " + b + " to store at index " + storeNumber);
+        //Unpack array
+        ArrayList<Bicycle> bikesInInventory = storesOfBikes.get(storeNumber);
+        bikesInInventory.add(b);
+
+        // Repack array
+        storesOfBikes.set(storeNumber, bikesInInventory);
+        System.out.println("success!");
+        return true;
+    }
+
+    /**
+     * Removes a bike at a specific store.
+     *
+     * @param storeNumber the store that has the bike
+     * @param b the bike to be removed
+     * @return true of the bike is removed, false if the bike does not exist, or bike is null.
+     */
+    public boolean removeBike(int storeNumber, Bicycle b) {
+        if (storeNumber < 0 || storeNumber > this.storesOfBikes.size() - 1) {
+            return false;
+        }
+        if (b == null) {
+            return false;
+        }
+        System.out.println("Attempting to remove " + b + " to store at index " + storeNumber);
+        // Remove bike from array.
+        ArrayList<Bicycle> bikesInInventory = storesOfBikes.get(storeNumber);
+        bikesInInventory.remove(b); //YEET
+        System.out.println("success!");
+        return true;
+    }
+
+    /**
+     * Prints the indexes before each bike , one store per line
+     *
+     * @param stores stores of bikes
+     */
+    public static void print(ArrayList<ArrayList<Bicycle>> stores) {
+        for (int i = 0; i < stores.size(); ++i) {
+            System.out.println("---------- " + "printing row " + (i + 1) + " ----------");
+            for (int j = 0; j < stores.get(i).size(); ++j) {
+                System.out.println(stores.get(i).get(j) + " ");
+
+            }
+        }
+    }
+
+    public static void printSingle(ArrayList<Bicycle> stores) {
+        System.out.println("----------" + "printSingle" + "----------");
+        for (int j = 0; j < stores.size(); ++j) {
+            System.out.println(stores.get(j) + " ");
+        }
+
+    }
+
+    public static void printRank(ArrayList<Bicycle> stores) {
+        System.out.println("----------" + "printRank" + "----------");
+        for (int j = 0; j < stores.size(); ++j) {
+            System.out.println(stores.get(j) + " " + stores.get(j).calculatedDetails().getRank());
+        }
+
+    }
+
+    /**
+     * Groups bikes by type ans sorts them by the ranking of Details. There will be three groups and each group stored in descending order by rank.
+     *
+     * @param stores the stores of bikes
+     * @return a newly created ArrayList<ArrayList<Bicycle>> with the bikes sorted.
+     */
+    public static ArrayList<ArrayList<Bicycle>> sortBikesByType(final ArrayList<ArrayList<Bicycle>> stores) {
+        ArrayList<ArrayList<Bicycle>> newStore = new ArrayList<ArrayList<Bicycle>>();
+        // group arrayLists
+        ArrayList<Bicycle> mountainBikes = new ArrayList<Bicycle>();
+        ArrayList<Bicycle> speedBikes = new ArrayList<Bicycle>();
+        ArrayList<Bicycle> childBikes = new ArrayList<Bicycle>();
+        System.out.println("---------- " + "grouping by bike type... " + " ----------");
+        for (int i = 0; i < stores.size(); ++i) {
+            for (int j = 0; j < stores.get(i).size(); ++j) {
+                // System.out.println(stores.get(i).get(j).calculatedDetails().getRank() + " ");
+                Bicycle bike = stores.get(i).get(j);
+                if (bike instanceof ChildBike) {
+                    childBikes.add(bike);
+                } else if (bike instanceof MountainBike) {
+                    mountainBikes.add(bike);
+                } else if (bike instanceof SpeedBike) {
+                    speedBikes.add(bike);
+                }
+            }
+        }
+        //printRank(childBikes);
+        //printRank(mountainBikes);
+        //printRank(speedBikes);
+        System.out.println("sorting...");
+        sortType(childBikes);
+        sortType(mountainBikes);
+        sortType(speedBikes);
+        System.out.println("sorted");
+        //printRank(childBikes);
+        //printRank(mountainBikes);
+        //printRank(speedBikes);
+        newStore.add(childBikes);
+        newStore.add(mountainBikes);
+        newStore.add(speedBikes);
+        return newStore;
+    }
+
+    private static void sortType(ArrayList<Bicycle> arrList) {
+        for (int x = 0; x < arrList.size(); ++x) {
+            for (int i = 0; i < arrList.size(); ++i) {
+                for (int j = i + 1; j < arrList.size(); ++j) {
+                    int compare1 = arrList.get(i).calculatedDetails().getRank();
+                    int compare2 = arrList.get(j).calculatedDetails().getRank();
+                    if (compare1 < compare2) {
+                        Bicycle tmp = arrList.get(i);
+                        arrList.set(i, arrList.get(j));
+                        arrList.set(j, tmp);
+                    }
+                }
+            }
+        }
+    }
+
+    public static void print(Object[] arr) {
+        for (Object o : arr) {
+            System.out.println(o);
+        }
+    }
+
+    public static void print(Object[][] arr) {
+        for (int i = 0; i < arr.length; i++) {
+            System.out.println("---------- " + "printing row " + (i + 1) + " ----------");
+            print(arr[i]);
+
+        }
+    }
+
+    /**
+     * Returns a 2D array containing all the bikes in the store in proper sequence (from first to last element). Store 0 with all its bikes, store 1 with all its bikes, and so on.
+     *
+     * @return a 2D array of all stores with bikes.
+     */
+    public Object[][] toArray() {
+        Object[][] arr = new Object[storesOfBikes.size()][];
+        for (int i = 0; i < storesOfBikes.size(); i++) {
+            arr[i] = storesOfBikes.toArray();
+        }
+        return arr;
+    }
+
+    /**
+     * Retains only the Bicycles in the stores that are contained in the specified collection. In other words, removes from this list all of bikes that are not contained in the specified location.
+     *
+     * @param c the bikes to be removed
+     * @return true if any store changed as a result of the call.
+     */
+    public boolean retainAll(Collection<Bicycle> c) {
+        boolean modified = false;
+        for (int i = storesOfBikes.size() - 1; i >= 0; i--) {
+            ArrayList<Bicycle> bikes = storesOfBikes.get(i);
+            for (int j = bikes.size() - 1; j >= 0; j--) {
+                Bicycle bike = bikes.get(j);
+                if (!c.contains(bike)) {
+                    bikes.remove(j);
+                    System.out.println("Removing " + bike);
+                    modified = true;
+                }
+            }
+        }
+        System.out.println("Bikes to remove:");
+        printSingle((ArrayList<Bicycle>) c);
+        return modified;
+    }
+
+    public static void main(String[] args) {
+        BikeStores bikes = new BikeStores();
+        //add 5 bikes to store 0 ( 2 speedBikes, 2 mountain 1 child)
+        bikes.addBike(0, new SpeedBike(4, 3, 10, 40));
+        bikes.addBike(0, new SpeedBike(1, 2, 10, 30));
+        bikes.addBike(0, new MountainBike(1, 2, 3, 20));
+        bikes.addBike(0, new MountainBike(3, 2, 10, 25));
+        bikes.addBike(0, new ChildBike(false, 1, 1, 10));
+        //add 5 bikes to store 1 (  3 speedbikes, 1 mountain 1 child)
+        bikes.addBike(1, new SpeedBike(10, 4, 10, 20));
+        bikes.addBike(1, new SpeedBike(0, 2, 10, 50));
+        bikes.addBike(1, new SpeedBike(3, 2, 10, 38));
+        bikes.addBike(1, new MountainBike(1, 3, 5, 44));
+        bikes.addBike(1, new ChildBike(true, 1, 1, 15));
+        //add 6 bikes to store 2 (  2 speedBikes, 2 mountain 2 child )
+        bikes.addBike(2, new SpeedBike(7, 10, 20, 25));
+        bikes.addBike(2, new SpeedBike(0, 8, 40, 55)); // retainAll should match this one
+        bikes.addBike(2, new MountainBike(2, 3, 15, 33));
+        bikes.addBike(2, new MountainBike(1, 3, 15, 24));
+        bikes.addBike(2, new ChildBike(true, 1, 2, 20));  
+        bikes.addBike(2, new ChildBike(false, 1, 1, 18));// retainAll should match this one
+        //remove one child bike from store 2
+        bikes.removeBike(2, new ChildBike(true, 1, 2, 20)); // Java reuses the object created earlier since it has the same values.
+        //PRINT
+        print(bikes.storesOfBikes);
+        //SORT
+        ArrayList<ArrayList<Bicycle>> sortedBikes = sortBikesByType(bikes.storesOfBikes);
+        //PRINT what the method return
+        System.out.println("SORTED BIKES");
+        print(sortedBikes);
+        //PRINT the original store
+        System.out.println("ORIGINAL STORE ARRAYLIST");
+        print(bikes.storesOfBikes);
+        // ---------- TEST retainAll ----------
+        System.out.println("Testing retainAll();...");
+        Collection<Bicycle> c1 = new ArrayList<Bicycle>();
+        c1.add(new SpeedBike(0, 8, 40, 55));
+        c1.add(new ChildBike(false, 1, 1, 18));
+        Bicycle b1 = bikes.storesOfBikes.get(2).get(1);
+        Bicycle b2 = bikes.storesOfBikes.get(2).get(4);
+        Bicycle b3 = ((ArrayList<Bicycle>) c1).get(0);
+        Bicycle b4 = ((ArrayList<Bicycle>) c1).get(1);
+        
+        System.out.println(b1.equals(b3) + " " + b2.equals(b4));
+        bikes.retainAll(c1);
+        print(bikes.storesOfBikes);
+
+    }
+
+}
+
+class NotABike {
+
+}
+
+
+ diff --git a/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/ChildBike.html b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/ChildBike.html new file mode 100644 index 0000000..1c1caf5 --- /dev/null +++ b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/ChildBike.html @@ -0,0 +1,84 @@ + + + +ChildBike.java + + + + +
/home/caleb/ASDV-Java/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/ChildBike.java
+
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.calebfontenot.mp4_calebfontenot;
+
+/**
+ *
+ * @author caleb
+ */
+public class ChildBike extends Bicycle  //remove comment  in front of extends
+{
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final ChildBike other = (ChildBike) obj;
+        System.out.println("Super returns: " + super.equals(obj));
+        return this.helpWheels == other.helpWheels && super.equals(obj);
+    }
+    
+    private boolean helpWheels;
+
+    public ChildBike(boolean helpWheels, int cadence, int gear, int speed)
+    {
+        super(cadence, gear, speed);
+        this.helpWheels = helpWheels;
+    }
+
+    public boolean isHelpWheels()
+    {
+        return helpWheels;
+    }
+
+    public void setHelpWheels(boolean helpWheels)
+    {
+        this.helpWheels = helpWheels;
+    }
+
+    @Override
+    Details calculatedDetails()
+    {
+        return Details.getDetails(this);
+    }
+
+    @Override
+    public String toString()
+    {
+        return super.toString() + "ChildBike{" + "helpWheels=" + helpWheels + '}';
+    }
+    
+}
+
+
+ diff --git a/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/Details.html b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/Details.html new file mode 100644 index 0000000..4d4f9fb --- /dev/null +++ b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/Details.html @@ -0,0 +1,81 @@ + + + +Details.java + + + + +
/home/caleb/ASDV-Java/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/Details.java
+
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.calebfontenot.mp4_calebfontenot;
+
+/**
+ *
+ * @author caleb
+ */
+public class Details {
+
+    private int rank;
+    private String info;
+
+    public int getRank()
+    {
+        return rank;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+
+    public static Details getDetails(Bicycle b)
+    {
+        Details d = new Details();
+        if (b instanceof SpeedBike) {
+            if (((SpeedBike) b).getWeight() < 1) {
+                d.rank = 10;
+            } else if (((SpeedBike) b).getWeight() > 1 && ((SpeedBike) b).getWeight() < 8) {
+                d.rank = 9;
+            } else {
+                d.rank = 0;
+            }
+        } else if (b instanceof MountainBike) {
+            if (((MountainBike) b).getSeatHeight() > 2) {
+                d.rank = 10;
+            } else {
+                d.rank = 0;
+            }
+        } else if (b instanceof ChildBike) {
+            if (((ChildBike) b).isHelpWheels()) {
+                d.rank = 10;
+            } else {
+                d.rank = 0;
+            }
+        } else {
+            return null;
+        }
+
+        d.info = b.toString();
+        return d;
+    }
+
+}
+
+
+ diff --git a/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/MountainBike.html b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/MountainBike.html new file mode 100644 index 0000000..d760041 --- /dev/null +++ b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/MountainBike.html @@ -0,0 +1,86 @@ + + + +MountainBike.java + + + + +
/home/caleb/ASDV-Java/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/MountainBike.java
+
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.calebfontenot.mp4_calebfontenot;
+
+/**
+ *
+ * @author caleb
+ */
+public class MountainBike extends Bicycle
+{
+
+    private int seatHeight;
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MountainBike other = (MountainBike) obj;
+        System.out.println("Super returns: " + super.equals(obj));
+        return this.seatHeight == other.seatHeight && super.equals(obj);
+    }
+
+    public MountainBike(int seatHeight, int cadence, int gear, int speed)
+    {
+        super(cadence, gear, speed);
+        this.seatHeight = seatHeight;
+    }
+
+    public int getSeatHeight()
+    {
+        return seatHeight;
+    }
+
+    public void setSeatHeight(int seatHeight)
+    {
+        this.seatHeight = seatHeight;
+    }
+
+    @Override
+    public String toString()
+    {
+        return super.toString() + " MountainBike{" + "seatHeight=" + seatHeight + '}';
+    }
+
+    @Override
+    Details calculatedDetails()
+    {
+        return Details.getDetails(this);
+    }
+
+}
+
+
+
+ diff --git a/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/SpeedBike.html b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/SpeedBike.html new file mode 100644 index 0000000..404d911 --- /dev/null +++ b/Semester 2/Assignments/MP4_CalebFontenot/Printed HTMLs/SpeedBike.html @@ -0,0 +1,94 @@ + + + +SpeedBike.java + + + + +
/home/caleb/ASDV-Java/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/SpeedBike.java
+
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.calebfontenot.mp4_calebfontenot;
+
+/**
+ *
+ * @author caleb
+ */
+public class SpeedBike extends Bicycle
+{
+
+    @Override
+    public int hashCode()
+    {
+        int hash = 5;
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final SpeedBike other = (SpeedBike) obj;
+        System.out.println("Super returns: " + super.equals(obj));
+        return Double.doubleToLongBits(this.weight) == Double.doubleToLongBits(other.weight) && super.equals(obj);
+    }
+    
+    private double weight;
+
+    public SpeedBike(double weight, int cadence, int gear, int speed)
+    {
+        super(cadence, gear, speed);
+        this.weight = weight;
+    }
+    
+    public double getWeight()
+    {
+        return weight;
+    }
+
+    public void setWeight(double weight)
+    {
+        this.weight = weight;
+    }
+
+    @Override
+    public String toString()
+    {
+        return super.toString() + " SpeedBike{" + "weight=" + weight + '}';
+    }
+
+    @Override
+    Details calculatedDetails()
+    {
+        return Details.getDetails(this);
+    }
+
+    
+}
+
+
+ diff --git a/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/BikeStores.java b/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/BikeStores.java index 1ab881f..420b23b 100644 --- a/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/BikeStores.java +++ b/Semester 2/Assignments/MP4_CalebFontenot/src/main/java/com/calebfontenot/mp4_calebfontenot/BikeStores.java @@ -228,8 +228,8 @@ public class BikeStores { bikes.addBike(2, new SpeedBike(0, 8, 40, 55)); // retainAll should match this one bikes.addBike(2, new MountainBike(2, 3, 15, 33)); bikes.addBike(2, new MountainBike(1, 3, 15, 24)); - bikes.addBike(2, new ChildBike(true, 1, 2, 20)); // retainAll should match this one - bikes.addBike(2, new ChildBike(false, 1, 1, 18)); + bikes.addBike(2, new ChildBike(true, 1, 2, 20)); + bikes.addBike(2, new ChildBike(false, 1, 1, 18));// retainAll should match this one //remove one child bike from store 2 bikes.removeBike(2, new ChildBike(true, 1, 2, 20)); // Java reuses the object created earlier since it has the same values. //PRINT @@ -246,7 +246,7 @@ public class BikeStores { System.out.println("Testing retainAll();..."); Collection c1 = new ArrayList(); c1.add(new SpeedBike(0, 8, 40, 55)); - c1.add(new ChildBike(true, 1, 2, 20)); + c1.add(new ChildBike(false, 1, 1, 18)); Bicycle b1 = bikes.storesOfBikes.get(2).get(1); Bicycle b2 = bikes.storesOfBikes.get(2).get(4); Bicycle b3 = ((ArrayList) c1).get(0); diff --git a/Semester 2/ZIPs/MP4_CalebFontenot.zip b/Semester 2/ZIPs/MP4_CalebFontenot.zip index 848c586f04b1cf28d6e91c291b0c4991d8239688..8bb29104bb4862233b59fa3347db1a775333e46e 100644 GIT binary patch literal 22014 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 ZuzG~ly-*=OK?XsFLN*45y)q#80szWbpKJgC