diff --git a/pom.xml b/pom.xml index 93036ba..4d75a58 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,26 @@ io.zipcoder polymorphism 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 7 + 7 + + + + + + + junit + junit + 4.12 + test + + \ No newline at end of file diff --git a/src/main/java/io/zipcoder/polymorphism/Console.java b/src/main/java/io/zipcoder/polymorphism/Console.java new file mode 100644 index 0000000..978a731 --- /dev/null +++ b/src/main/java/io/zipcoder/polymorphism/Console.java @@ -0,0 +1,45 @@ +package io.zipcoder.polymorphism; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Scanner; + +public class Console { + + private final Scanner input; + private final PrintStream output; + + public Console(InputStream in, PrintStream out){ + + this.input = new Scanner(in); + this.output = out; + } + + public void print(String val, Object... args) { + output.format(val, args); + } + + public void println(String val, Object... vals) { + print(val + "\n", vals); + } + + public String getStringInput(String prompt, Object... args) { + println(prompt, args); + return input.nextLine(); + } + + public Integer getIntegerInput(String prompt, Object... args) { + + String stringInput = getStringInput(prompt, args); + try { + Integer intInput = Integer.valueOf(stringInput); + return intInput; + + } catch (NumberFormatException nfe) { // TODO - Eliminate recursive nature + println("[ %s ] is an invalid user input!", stringInput); + println("Try inputting an integer value!"); + } + + return getIntegerInput(prompt, args); + } +} diff --git a/src/main/java/io/zipcoder/polymorphism/MainApplication.java b/src/main/java/io/zipcoder/polymorphism/MainApplication.java index ea9281e..f246851 100644 --- a/src/main/java/io/zipcoder/polymorphism/MainApplication.java +++ b/src/main/java/io/zipcoder/polymorphism/MainApplication.java @@ -1,7 +1,61 @@ package io.zipcoder.polymorphism; +import io.zipcoder.polymorphism.Pets.*; + /** * Created by leon on 11/6/17. */ public class MainApplication { + + Console console = new Console(System.in, System.out); + Pets[] setOfPets; + + public void run() { + + printInfo(getTypes(getNumberOfPets())); + + } + + public Integer getNumberOfPets(){ + + int numberOfPets = console.getIntegerInput("How many pets do you have?"); + + return numberOfPets; + } + + + public Pets[] getTypes(int numberOfPets){ + + setOfPets = new Pets[numberOfPets]; + + for (int index = 0; index < numberOfPets; index++) { + String type = console.getStringInput("\nWhat type of pet is it?\n" + + " Options: Dog, Cat, Cow"); + switch(type.toLowerCase()){ + + case "dog": setOfPets[index] = new Dog(getName()); break; + case "cat": setOfPets[index] = new Cat(getName()); break; + case "cow": setOfPets[index] = new Cow(getName()); break; + default: console.println("\nNot a valid animal."); index -= 1; break; + } + } + + return setOfPets; + } + + + public String getName() { + + return console.getStringInput("\nWhat is the pet's name?"); + } + + + public void printInfo(Pets[] pets){ + + for (Pets pet: pets) { + console.println(pet.toString()); + } + } + + } diff --git a/src/main/java/io/zipcoder/polymorphism/Pets/Cat.java b/src/main/java/io/zipcoder/polymorphism/Pets/Cat.java new file mode 100644 index 0000000..ebfa631 --- /dev/null +++ b/src/main/java/io/zipcoder/polymorphism/Pets/Cat.java @@ -0,0 +1,23 @@ +package io.zipcoder.polymorphism.Pets; + +public class Cat extends Pets { + + public Cat(String name) { + + super(name); + } + + public Cat(){ + super("Fluffy"); + } + + @Override + public String type() { + return "Cat"; + } + + @Override + public String speak() { + return "meow!"; + } +} diff --git a/src/main/java/io/zipcoder/polymorphism/Pets/Cow.java b/src/main/java/io/zipcoder/polymorphism/Pets/Cow.java new file mode 100644 index 0000000..276b6c8 --- /dev/null +++ b/src/main/java/io/zipcoder/polymorphism/Pets/Cow.java @@ -0,0 +1,22 @@ +package io.zipcoder.polymorphism.Pets; + +public class Cow extends Pets { + + public Cow(String name) { + super(name); + } + + public Cow(){ + super("Mimi"); + } + + @Override + public String type() { + return "Cow"; + } + + @Override + public String speak() { + return "moo!"; + } +} diff --git a/src/main/java/io/zipcoder/polymorphism/Pets/Dog.java b/src/main/java/io/zipcoder/polymorphism/Pets/Dog.java new file mode 100644 index 0000000..a91e77a --- /dev/null +++ b/src/main/java/io/zipcoder/polymorphism/Pets/Dog.java @@ -0,0 +1,21 @@ +package io.zipcoder.polymorphism.Pets; + +public class Dog extends Pets { + + public Dog(String name) { + super(name); + } + + public Dog(){ + super("Dingo"); + } + + public String type(){ + return "Dog"; + } + + @Override + public String speak() { + return "woof!"; + } +} diff --git a/src/main/java/io/zipcoder/polymorphism/Pets/Pets.java b/src/main/java/io/zipcoder/polymorphism/Pets/Pets.java new file mode 100644 index 0000000..21be388 --- /dev/null +++ b/src/main/java/io/zipcoder/polymorphism/Pets/Pets.java @@ -0,0 +1,29 @@ +package io.zipcoder.polymorphism.Pets; + +public abstract class Pets { + + private String name; + public abstract String type(); + public abstract String speak(); + + public Pets(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String toString() { + String[] className; + className = this.getClass().getName().split("\\."); + + return String.format("\n%s is a %s and sounds like %s", + this.getName(), className[className.length - 1], this.speak()); + } + +} diff --git a/src/main/java/io/zipcoder/polymorphism/main.java b/src/main/java/io/zipcoder/polymorphism/main.java new file mode 100644 index 0000000..73a4e56 --- /dev/null +++ b/src/main/java/io/zipcoder/polymorphism/main.java @@ -0,0 +1,12 @@ +package io.zipcoder.polymorphism; + +public class main { + + public static void main(String[] args) { + + MainApplication newMain = new MainApplication(); + + newMain.run(); + + } +} diff --git a/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java b/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java index 7181623..9275ac5 100644 --- a/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java +++ b/src/test/java/io/zipcoder/polymorphism/MainApplicationTest.java @@ -1,7 +1,48 @@ package io.zipcoder.polymorphism; +import org.junit.Assert; +import org.junit.Test; /** * Created by leon on 11/6/17. */ public class MainApplicationTest { + MainApplication testApp = new MainApplication(); + + @Test + public void addPet() { + + testApp.getTypes(2); + int expected = 2; + int actual = testApp.setOfPets.length; + + Assert.assertEquals(expected,actual); + } + + @Test + public void printPets() { +// testApp.addPet("Cat"); +// testApp.addPet("Dog"); +// +// String expected = "No name cat"; +// String actual = testApp.petList.get(0).getName(); +// Assert.assertEquals(expected,actual); +// +// expected = "No name dog"; +// actual = testApp.petList.get(1).getName(); +// Assert.assertEquals(expected,actual); + } + + // **************************** + + @Test + public void getNumberOfPets() { + } + + @Test + public void getTypes() { + } + + @Test + public void getName() { + } }