From 8395f443579e6560db1937b13286e08362c53cc1 Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Mon, 11 Nov 2019 18:29:57 -0500 Subject: [PATCH 1/4] Scheleton for the lab --- .gitignore | 2 +- src/main/java/io/zipcoder/App.java | 54 ++++++++++++++++++++ src/main/java/io/zipcoder/Console.java | 62 +++++++++++++++++++++++ src/main/java/io/zipcoder/pets/Cat.java | 20 ++++++++ src/main/java/io/zipcoder/pets/Dog.java | 18 +++++++ src/main/java/io/zipcoder/pets/Horse.java | 19 +++++++ src/main/java/io/zipcoder/pets/Pet.java | 32 ++++++++++++ 7 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/zipcoder/App.java create mode 100644 src/main/java/io/zipcoder/Console.java create mode 100644 src/main/java/io/zipcoder/pets/Cat.java create mode 100644 src/main/java/io/zipcoder/pets/Dog.java create mode 100644 src/main/java/io/zipcoder/pets/Horse.java create mode 100644 src/main/java/io/zipcoder/pets/Pet.java diff --git a/.gitignore b/.gitignore index 2054469..282aa9d 100644 --- a/.gitignore +++ b/.gitignore @@ -104,4 +104,4 @@ target/* .project .classpath .settings - +*.DS_Store diff --git a/src/main/java/io/zipcoder/App.java b/src/main/java/io/zipcoder/App.java new file mode 100644 index 0000000..e56f1ba --- /dev/null +++ b/src/main/java/io/zipcoder/App.java @@ -0,0 +1,54 @@ +package io.zipcoder.polymorphism; + +import io.zipcoder.polymorphism.pets.Cat; +import io.zipcoder.polymorphism.pets.Dog; +import io.zipcoder.polymorphism.pets.Horse; +import io.zipcoder.polymorphism.pets.Pet; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class App { + + List petList = new ArrayList(); + Console menu = new Console(System.in, System.out); + + public void runApp() { + + int numberOfPets; + + numberOfPets = this.menu.getIntegerInput("How many pets do you have?"); + + for (int i = 0; i < numberOfPets; i++) { + String petType = ""; + String petName = ""; + petType = this.menu.getStringInput("What type is pet: " + (i+1) + "?"); + addPet(petType); + petName = this.menu.getStringInput("What is the pet name?"); + this.petList.get(i).setName(petName); + } + + printPets(); + + + } + + public void addPet(String petType){ + petType = petType.toLowerCase(); + if (petType.equals("cat")) this.petList.add(new Cat()); + if (petType.equals("dog")) this.petList.add(new Dog()); + if (petType.equals("horse")) this.petList.add(new Horse()); + } + + public void printPets(){ + int i = 0; + for (Pet eachPet : this.petList){ + String petInfo = ""; + petInfo = petInfo.concat(this.petList.get(i).getPetType().concat(": " + this.petList.get(i).getName())); + petInfo = petInfo.concat(" - " + this.petList.get(i).speak()); + this.menu.println(petInfo); + i++; + } + } +} diff --git a/src/main/java/io/zipcoder/Console.java b/src/main/java/io/zipcoder/Console.java new file mode 100644 index 0000000..4fc12e7 --- /dev/null +++ b/src/main/java/io/zipcoder/Console.java @@ -0,0 +1,62 @@ +package io.zipcoder.polymorphism; + +import java.util.Scanner; +import java.io.PrintStream; +import java.io.InputStream; + +public final class Console { + + private final Scanner userInput; + private final PrintStream output; + + +//----------- constructor -------------------------- + public Console (InputStream in, PrintStream out) { + this.userInput = new Scanner(in); + this.output = out; + } + +//----------- format the prompt and display it ----------- +public void println (String val, Object... args){ + print(val + "\n",args); +} + + public void print (String val, Object... args){ + this.output.format(val,args); + } + +//----------- prompt the user for input and get the string value of the answer ---------- + public String getStringInput (String prompt, Object... args){ + println(prompt,args); + return this.userInput.nextLine(); + } + +//----------- prompt the user for input and get the numeric value of the answer ---------- + + public Integer getIntegerInput (String prompt, Object... args){ + String tempInput = getStringInput(prompt,args); + try{ + Integer integerInput = Integer.parseInt(tempInput); + return integerInput; + } catch (NumberFormatException nfe){ + println("[ %s ] is not a valid user input!",tempInput); + println("Try inputting an integer value!"); + return getIntegerInput(prompt,args); + } + } + + public Double getDoubleInput(String prompt, Object... args){ + String tempInput = getStringInput(prompt,args); + try { + Double doubleInput = Double.parseDouble(tempInput); + return doubleInput; + } catch (NumberFormatException nfe){ + println("[ %s ] is not a valid user input!",tempInput); + println("Try inputting a number with decimals value!"); + return getDoubleInput(prompt,args); + } + + } + + +} diff --git a/src/main/java/io/zipcoder/pets/Cat.java b/src/main/java/io/zipcoder/pets/Cat.java new file mode 100644 index 0000000..3e7bc63 --- /dev/null +++ b/src/main/java/io/zipcoder/pets/Cat.java @@ -0,0 +1,20 @@ +package io.zipcoder.polymorphism.pets; + +public class Cat extends Pet { + + public Cat (String name){ + super.setName(name); + super.setPetType("Cat"); + } + + public Cat(){ + super.setName("No name cat"); + super.setPetType("Cat"); + } + + public String speak(){ + return "meow"; + } + + +} diff --git a/src/main/java/io/zipcoder/pets/Dog.java b/src/main/java/io/zipcoder/pets/Dog.java new file mode 100644 index 0000000..5dd4754 --- /dev/null +++ b/src/main/java/io/zipcoder/pets/Dog.java @@ -0,0 +1,18 @@ +package io.zipcoder.polymorphism.pets; + +public class Dog extends Pet { + + public Dog (String name){ + super.setName(name); + super.setPetType("Dog"); + } + + public Dog (){ + super.setPetType("Dog"); + super.setName("No name dog"); + } + + public String speak(){ + return "Woof"; + } +} diff --git a/src/main/java/io/zipcoder/pets/Horse.java b/src/main/java/io/zipcoder/pets/Horse.java new file mode 100644 index 0000000..8359cc8 --- /dev/null +++ b/src/main/java/io/zipcoder/pets/Horse.java @@ -0,0 +1,19 @@ +package io.zipcoder.polymorphism.pets; + +public class Horse extends Pet{ + + + public Horse(String name){ + super.setName(name); + super.setPetType("Horse"); + } + + public Horse(){ + super.setName("No name horse"); + super.setPetType("Horse"); + } + + public String speak(){ + return "Neigh"; + } +} diff --git a/src/main/java/io/zipcoder/pets/Pet.java b/src/main/java/io/zipcoder/pets/Pet.java new file mode 100644 index 0000000..51d564d --- /dev/null +++ b/src/main/java/io/zipcoder/pets/Pet.java @@ -0,0 +1,32 @@ +package io.zipcoder.polymorphism.pets; + +public abstract class Pet { + + private String name; + + + private String petType; + + public abstract String speak(); + + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPetType() { + return petType; + } + + public void setPetType(String petType) { + this.petType = petType; + } + +} + + From a1363f6dccd545455f117d9408820500a47f4995 Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Mon, 11 Nov 2019 18:35:51 -0500 Subject: [PATCH 2/4] fixed references --- src/main/java/io/zipcoder/App.java | 10 +++++----- src/main/java/io/zipcoder/Application.java | 8 ++++++++ src/main/java/io/zipcoder/Console.java | 2 +- src/main/java/io/zipcoder/pets/Cat.java | 2 +- src/main/java/io/zipcoder/pets/Dog.java | 2 +- src/main/java/io/zipcoder/pets/Horse.java | 2 +- src/main/java/io/zipcoder/pets/Pet.java | 2 +- 7 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/zipcoder/App.java b/src/main/java/io/zipcoder/App.java index e56f1ba..c0bff11 100644 --- a/src/main/java/io/zipcoder/App.java +++ b/src/main/java/io/zipcoder/App.java @@ -1,9 +1,9 @@ -package io.zipcoder.polymorphism; +package io.zipcoder; -import io.zipcoder.polymorphism.pets.Cat; -import io.zipcoder.polymorphism.pets.Dog; -import io.zipcoder.polymorphism.pets.Horse; -import io.zipcoder.polymorphism.pets.Pet; +import io.zipcoder.pets.Cat; +import io.zipcoder.pets.Dog; +import io.zipcoder.pets.Horse; +import io.zipcoder.pets.Pet; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/io/zipcoder/Application.java b/src/main/java/io/zipcoder/Application.java index 3a257cb..f62082f 100644 --- a/src/main/java/io/zipcoder/Application.java +++ b/src/main/java/io/zipcoder/Application.java @@ -2,4 +2,12 @@ public class Application { + + public static void main (String [] args){ + App newApp = new App(); + newApp.runApp(); + } + + + } diff --git a/src/main/java/io/zipcoder/Console.java b/src/main/java/io/zipcoder/Console.java index 4fc12e7..1b03c2a 100644 --- a/src/main/java/io/zipcoder/Console.java +++ b/src/main/java/io/zipcoder/Console.java @@ -1,4 +1,4 @@ -package io.zipcoder.polymorphism; +package io.zipcoder; import java.util.Scanner; import java.io.PrintStream; diff --git a/src/main/java/io/zipcoder/pets/Cat.java b/src/main/java/io/zipcoder/pets/Cat.java index 3e7bc63..4f989f0 100644 --- a/src/main/java/io/zipcoder/pets/Cat.java +++ b/src/main/java/io/zipcoder/pets/Cat.java @@ -1,4 +1,4 @@ -package io.zipcoder.polymorphism.pets; +package io.zipcoder.pets; public class Cat extends Pet { diff --git a/src/main/java/io/zipcoder/pets/Dog.java b/src/main/java/io/zipcoder/pets/Dog.java index 5dd4754..830d67b 100644 --- a/src/main/java/io/zipcoder/pets/Dog.java +++ b/src/main/java/io/zipcoder/pets/Dog.java @@ -1,4 +1,4 @@ -package io.zipcoder.polymorphism.pets; +package io.zipcoder.pets; public class Dog extends Pet { diff --git a/src/main/java/io/zipcoder/pets/Horse.java b/src/main/java/io/zipcoder/pets/Horse.java index 8359cc8..e829396 100644 --- a/src/main/java/io/zipcoder/pets/Horse.java +++ b/src/main/java/io/zipcoder/pets/Horse.java @@ -1,4 +1,4 @@ -package io.zipcoder.polymorphism.pets; +package io.zipcoder.pets; public class Horse extends Pet{ diff --git a/src/main/java/io/zipcoder/pets/Pet.java b/src/main/java/io/zipcoder/pets/Pet.java index 51d564d..5c3c93b 100644 --- a/src/main/java/io/zipcoder/pets/Pet.java +++ b/src/main/java/io/zipcoder/pets/Pet.java @@ -1,4 +1,4 @@ -package io.zipcoder.polymorphism.pets; +package io.zipcoder.pets; public abstract class Pet { From e280ddb11f6baa162647f772093b07a57fb2382b Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Mon, 11 Nov 2019 18:47:23 -0500 Subject: [PATCH 3/4] added comparator logic --- .../zipcoder/comparators/TypeComparator.java | 20 +++++++++++++++++++ src/main/java/io/zipcoder/pets/Cat.java | 6 ++++-- src/main/java/io/zipcoder/pets/Dog.java | 7 ++++++- src/main/java/io/zipcoder/pets/Horse.java | 8 +++++++- 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/main/java/io/zipcoder/comparators/TypeComparator.java diff --git a/src/main/java/io/zipcoder/comparators/TypeComparator.java b/src/main/java/io/zipcoder/comparators/TypeComparator.java new file mode 100644 index 0000000..1d00fb9 --- /dev/null +++ b/src/main/java/io/zipcoder/comparators/TypeComparator.java @@ -0,0 +1,20 @@ +package io.zipcoder.comparators; + +import io.zipcoder.pets.Pet; + +import java.util.Comparator; + +public class TypeComparator implements Comparator { + public int compare(Pet petOne, Pet petTwo) { + int comparePet =0; + + if (petOne != null && petTwo != null){ + comparePet = petOne.getPetType().compareTo(petTwo.getPetType()); + } + + if (comparePet == 0){ + comparePet = petOne.getName().compareTo(petTwo.getName()); + } + return comparePet; + } +} diff --git a/src/main/java/io/zipcoder/pets/Cat.java b/src/main/java/io/zipcoder/pets/Cat.java index 4f989f0..73ee93b 100644 --- a/src/main/java/io/zipcoder/pets/Cat.java +++ b/src/main/java/io/zipcoder/pets/Cat.java @@ -1,6 +1,6 @@ package io.zipcoder.pets; -public class Cat extends Pet { +public class Cat extends Pet implements Comparable{ public Cat (String name){ super.setName(name); @@ -16,5 +16,7 @@ public String speak(){ return "meow"; } - + public int compareTo(Pet o) { + return 0; + } } diff --git a/src/main/java/io/zipcoder/pets/Dog.java b/src/main/java/io/zipcoder/pets/Dog.java index 830d67b..e876a8d 100644 --- a/src/main/java/io/zipcoder/pets/Dog.java +++ b/src/main/java/io/zipcoder/pets/Dog.java @@ -1,6 +1,6 @@ package io.zipcoder.pets; -public class Dog extends Pet { +public class Dog extends Pet implements Comparable{ public Dog (String name){ super.setName(name); @@ -15,4 +15,9 @@ public Dog (){ public String speak(){ return "Woof"; } + + public int compareTo(Pet o) { + return 0; + } } + diff --git a/src/main/java/io/zipcoder/pets/Horse.java b/src/main/java/io/zipcoder/pets/Horse.java index e829396..d398022 100644 --- a/src/main/java/io/zipcoder/pets/Horse.java +++ b/src/main/java/io/zipcoder/pets/Horse.java @@ -1,6 +1,8 @@ package io.zipcoder.pets; -public class Horse extends Pet{ +import java.util.Arrays; + +public class Horse extends Pet implements Comparable{ public Horse(String name){ @@ -16,4 +18,8 @@ public Horse(){ public String speak(){ return "Neigh"; } + + public int compareTo(Pet o) { + return 0; + } } From 9742f99982a1d84b620d91898bee644c592815b8 Mon Sep 17 00:00:00 2001 From: jeanvalentin51 Date: Tue, 12 Nov 2019 13:15:26 -0500 Subject: [PATCH 4/4] Add tests for sorting --- .../io/zipcoder/comparators/PetSorter.java | 23 +++++++ .../zipcoder/comparators/TypeComparator.java | 3 +- src/main/java/io/zipcoder/pets/Cat.java | 3 +- src/main/java/io/zipcoder/pets/Dog.java | 2 +- src/main/java/io/zipcoder/pets/Horse.java | 4 +- src/main/java/io/zipcoder/pets/Pet.java | 4 +- .../zipcoder/comparators/PetSorterTest.java | 69 +++++++++++++++++++ 7 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 src/main/java/io/zipcoder/comparators/PetSorter.java create mode 100644 src/test/java/io/zipcoder/comparators/PetSorterTest.java diff --git a/src/main/java/io/zipcoder/comparators/PetSorter.java b/src/main/java/io/zipcoder/comparators/PetSorter.java new file mode 100644 index 0000000..62e732b --- /dev/null +++ b/src/main/java/io/zipcoder/comparators/PetSorter.java @@ -0,0 +1,23 @@ +package io.zipcoder.comparators; + +import io.zipcoder.pets.Pet; + +import java.util.Arrays; +import java.util.Comparator; + +public class PetSorter { + + Pet [] petList; + + public PetSorter(Pet [] petList){ + this.petList = petList; + } + + public Pet [] sort(Comparator comparator){ + + Arrays.sort(petList,comparator); + + return petList; + } + +} diff --git a/src/main/java/io/zipcoder/comparators/TypeComparator.java b/src/main/java/io/zipcoder/comparators/TypeComparator.java index 1d00fb9..c358e1c 100644 --- a/src/main/java/io/zipcoder/comparators/TypeComparator.java +++ b/src/main/java/io/zipcoder/comparators/TypeComparator.java @@ -1,10 +1,11 @@ package io.zipcoder.comparators; import io.zipcoder.pets.Pet; - import java.util.Comparator; public class TypeComparator implements Comparator { + + public int compare(Pet petOne, Pet petTwo) { int comparePet =0; diff --git a/src/main/java/io/zipcoder/pets/Cat.java b/src/main/java/io/zipcoder/pets/Cat.java index 73ee93b..daf11a8 100644 --- a/src/main/java/io/zipcoder/pets/Cat.java +++ b/src/main/java/io/zipcoder/pets/Cat.java @@ -1,6 +1,6 @@ package io.zipcoder.pets; -public class Cat extends Pet implements Comparable{ +public class Cat extends Pet { public Cat (String name){ super.setName(name); @@ -16,6 +16,7 @@ public String speak(){ return "meow"; } + public int compareTo(Pet o) { return 0; } diff --git a/src/main/java/io/zipcoder/pets/Dog.java b/src/main/java/io/zipcoder/pets/Dog.java index e876a8d..b005fbc 100644 --- a/src/main/java/io/zipcoder/pets/Dog.java +++ b/src/main/java/io/zipcoder/pets/Dog.java @@ -1,6 +1,6 @@ package io.zipcoder.pets; -public class Dog extends Pet implements Comparable{ +public class Dog extends Pet { public Dog (String name){ super.setName(name); diff --git a/src/main/java/io/zipcoder/pets/Horse.java b/src/main/java/io/zipcoder/pets/Horse.java index d398022..9923ce0 100644 --- a/src/main/java/io/zipcoder/pets/Horse.java +++ b/src/main/java/io/zipcoder/pets/Horse.java @@ -1,8 +1,7 @@ package io.zipcoder.pets; -import java.util.Arrays; -public class Horse extends Pet implements Comparable{ +public class Horse extends Pet{ public Horse(String name){ @@ -19,6 +18,7 @@ public String speak(){ return "Neigh"; } + public int compareTo(Pet o) { return 0; } diff --git a/src/main/java/io/zipcoder/pets/Pet.java b/src/main/java/io/zipcoder/pets/Pet.java index 5c3c93b..6dc6508 100644 --- a/src/main/java/io/zipcoder/pets/Pet.java +++ b/src/main/java/io/zipcoder/pets/Pet.java @@ -1,6 +1,8 @@ package io.zipcoder.pets; -public abstract class Pet { +import java.util.Comparator; + +public abstract class Pet implements Comparable{ private String name; diff --git a/src/test/java/io/zipcoder/comparators/PetSorterTest.java b/src/test/java/io/zipcoder/comparators/PetSorterTest.java new file mode 100644 index 0000000..5497d06 --- /dev/null +++ b/src/test/java/io/zipcoder/comparators/PetSorterTest.java @@ -0,0 +1,69 @@ +package io.zipcoder.comparators; + +import io.zipcoder.pets.Cat; +import io.zipcoder.pets.Dog; +import io.zipcoder.pets.Horse; +import io.zipcoder.pets.Pet; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Comparator; + +import static org.junit.Assert.*; + +public class PetSorterTest { + + Pet[] pets1 ; + Pet[] pets2; + + Dog dog1 = new Dog("Jack"); + Dog dog2 = new Dog("Ariel"); + Dog dog3 = new Dog("Lucky"); + Dog dog4 = new Dog("Moe"); + + Cat cat1 = new Cat("Zippy"); + Cat cat2 = new Cat("Fluffy"); + Cat cat3 = new Cat("Moo"); + + Horse horse1 = new Horse("Neigh"); + Horse horse2 = new Horse("Bleigh"); + + + @Before + public void setUp() throws Exception { + pets1 = new Pet[] {dog1,cat1,horse1,dog2,cat2,dog3,horse2,dog4,cat3}; + pets2 = new Pet[] {dog1,dog2,cat3,cat1,dog4,dog3,cat2,horse2,horse1}; + } + + + @Test + public void testInheritance1(){ + Assert.assertTrue(dog1 instanceof Comparable); + } + + @Test + public void testInheritance2(){ + Assert.assertTrue(cat1 instanceof Comparable); + } + + @Test + public void testInheritance3(){ + Assert.assertTrue(horse1 instanceof Comparable); + } + + @Test + public void sort() { + PetSorter sortedPets = new PetSorter(pets1); + Comparator comparator = (Comparator) new TypeComparator(); + + System.out.println(Arrays.toString(pets1)); + Pet [] result = sortedPets.sort(comparator); + // Arrays.sort(pets1); + System.out.println(Arrays.toString(pets1)); + + Assert.assertArrayEquals(pets1,result); + + } +} \ No newline at end of file