From 1c8b35a55acdd0a9e87007ed83a1f2962c3aae72 Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Tue, 18 Oct 2022 16:37:30 +0200 Subject: [PATCH] hw2: added code --- hw2/code/pom.xml | 17 +++ .../src/main/java/ch/usi/inf/ajp22/Main.java | 112 ++++++++++++++++++ .../ch/usi/inf/ajp22/flyable/Airplane.java | 46 +++++++ .../java/ch/usi/inf/ajp22/flyable/Couple.java | 25 ++++ .../ch/usi/inf/ajp22/flyable/Flyable.java | 7 ++ .../inf/ajp22/flyable/FlyableComparator.java | 7 ++ .../java/ch/usi/inf/ajp22/flyable/People.java | 23 ++++ .../inf/ajp22/flyable/PeopleComparator.java | 7 ++ .../java/ch/usi/inf/ajp22/flyable/Wizard.java | 19 +++ 9 files changed, 263 insertions(+) create mode 100644 hw2/code/pom.xml create mode 100644 hw2/code/src/main/java/ch/usi/inf/ajp22/Main.java create mode 100644 hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Airplane.java create mode 100644 hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Couple.java create mode 100644 hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Flyable.java create mode 100644 hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/FlyableComparator.java create mode 100644 hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/People.java create mode 100644 hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/PeopleComparator.java create mode 100644 hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Wizard.java diff --git a/hw2/code/pom.xml b/hw2/code/pom.xml new file mode 100644 index 0000000..9763dd5 --- /dev/null +++ b/hw2/code/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + ch.usi.inf.ajp22 + Assignment2 + 1.0-SNAPSHOT + + + 18 + 18 + UTF-8 + + + \ No newline at end of file diff --git a/hw2/code/src/main/java/ch/usi/inf/ajp22/Main.java b/hw2/code/src/main/java/ch/usi/inf/ajp22/Main.java new file mode 100644 index 0000000..c142180 --- /dev/null +++ b/hw2/code/src/main/java/ch/usi/inf/ajp22/Main.java @@ -0,0 +1,112 @@ +package ch.usi.inf.ajp22; + +import ch.usi.inf.ajp22.flyable.*; + +import java.util.ArrayList; +import java.util.List; + +public class Main { + + /** + * 3 Points + * TODO: Create a public static void function called "callFlyMethods". + * input: a List of objects that implement the Flyable interface. + * This function calls the method "fly" of every object inside the list. + */ + + /** + * 3 Points + * TODO: Create a public static void function called "transformPeople". + * input: a List from which People are read, called "src"; + * a List in which People are inserted, called "dst". + * This function iterates over all the elements of "src" and copies them in the "dst" List. + * If the element in "src" starts with the "z" or "Z" character then in the "dst" list is + * added a Wizard instead of a person. The Wizard's age must be 100 times the person's age. + * + * Remember to use the get-put principle properly. + */ + + /** + * You can use the main function to help check that you are on the right path for your solution. + * You don't have to change it yourself. + */ + public static void main(String[] args) { + Wizard circe = new Wizard("Circe", 300); + Wizard merlin = new Wizard("Merlin", 430); + Airplane firstAirplane = new Airplane<>(); + Airplane secondAirplane = new Airplane<>(); + People joe = new People("Joe", 20); + People eva = new People("Eva", 18); + People bill = new People("Bill", 20); + People fiona = new People("Fiona", 18); + People zeke = new People("Zeke", 18); + + + List flyableList = new ArrayList<>(); + flyableList.add(circe); + flyableList.add(merlin); + flyableList.add(firstAirplane); + callFlyMethod(flyableList); + + List firstPeopleList = new ArrayList<>(); + firstPeopleList.add(joe); + firstPeopleList.add(eva); + + List secondPeopleList = new ArrayList<>(); + secondPeopleList.add(bill); + secondPeopleList.add(fiona); + secondPeopleList.add(zeke); + + firstAirplane.setPassengers(firstPeopleList); + + /* + * Example usage of the transformPeople function + */ + transformPeople(secondPeopleList, firstPeopleList); + + /* + * Example of PeopleComparator usage + */ + PeopleComparator peopleComparator = new PeopleComparator<>(); + int res = peopleComparator.compare(bill, circe); + if(res > 0) { + System.out.printf("%s is greeter than %s\n", bill.getName(), circe.getName()); + } else if (res == 0) { + System.out.printf("%s is equal to %s\n", bill.getName(), circe.getName()); + } else { + System.out.printf("%s is less than %s\n", bill.getName(), circe.getName()); + } + + int res2 = peopleComparator.compare(merlin, circe); + if(res2 > 0) { + System.out.printf("%s is greeter than %s\n", merlin.getName(), circe.getName()); + } else if (res2 == 0) { + System.out.printf("%s is equal to %s\n", merlin.getName(), circe.getName()); + } else { + System.out.printf("%s is less than %s\n", merlin.getName(), circe.getName()); + } + + Couple> couple1 = new Couple<>(bill, firstAirplane); + System.out.println(couple1); + + Couple wizardCouple = new Couple<>(circe, circe); + System.out.print(wizardCouple); + + circe.setSpeed(1000); + merlin.setSpeed(200); + + /* + * Example of comparing two Wizards + */ + if ( circe.compareTo(merlin) > 0) { + System.out.println("Circe is faster than Merlin"); + } else if ( circe.compareTo(merlin) < 0) { + System.out.println("Circe is slower than Merlin"); + } else { + System.out.println("Circe has the same speed as Merlin"); + } + + firstAirplane.moveToPassengers(secondAirplane.getPassengers()); + + } +} diff --git a/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Airplane.java b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Airplane.java new file mode 100644 index 0000000..5db7b40 --- /dev/null +++ b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Airplane.java @@ -0,0 +1,46 @@ +package ch.usi.inf.ajp22.flyable; + +import java.util.ArrayList; +import java.util.List; + +/** + * 3 Points + * TODO: Improve the class below by parametrizing it (i.e. using generics). + * passengers can be of type People or any other subtype of People. + * 3 Points + * TODO: Create the following method: + * 1) moveToPassengers + * Input: a List of People called "dst". + * This method must copy all the passengers of the current plane to the "dst" List. + * After the copy, the List of passenger of the current plane must be cleared. + * + * Remember to use the get-put principle properly. + */ +public class Airplane implements Flyable{ + + private final List passengers; + + @Override + public int getSpeed() { + return 740; + } + + + @Override + public void fly() { + System.out.println("Check the engines and fly"); + } + + public Airplane() { + this.passengers = new ArrayList<>(); + } + + public void setPassengers(List list) { + passengers.addAll(list); + } + + public List getPassengers() { + return this.passengers; + } + +} diff --git a/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Couple.java b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Couple.java new file mode 100644 index 0000000..12ea385 --- /dev/null +++ b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Couple.java @@ -0,0 +1,25 @@ +package ch.usi.inf.ajp22.flyable; + +/** + * 3 Points + * TODO: Improve the class below by parametrizing it (i.e. using generics). + * passengers can be of type People or any other subtypes of People. + * flyable can be any type that implements the Flyable interface. + * This may lead in changing the type of the fields passenger and flyable. + */ +public class Couple { + + private final Object passenger; + private final Object flyable; + + public Couple(Object passenger, Object flyable) { + this.passenger = passenger; + this.flyable = flyable; + } + + @Override + public String toString() { + return String.format("Passenger :%s On :%s", ((People)this.passenger).getName(), + this.flyable.getClass().getSimpleName()); + } +} diff --git a/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Flyable.java b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Flyable.java new file mode 100644 index 0000000..409aeb9 --- /dev/null +++ b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Flyable.java @@ -0,0 +1,7 @@ +package ch.usi.inf.ajp22.flyable; + +public interface Flyable { + void fly(); + + int getSpeed(); +} diff --git a/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/FlyableComparator.java b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/FlyableComparator.java new file mode 100644 index 0000000..1f16101 --- /dev/null +++ b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/FlyableComparator.java @@ -0,0 +1,7 @@ +package ch.usi.inf.ajp22.flyable; + +/** + * 3 Points + * TODO: Write a Comparator named FlyableComparator. + * Comparison should be done using the speed of types that implement the Flyable interface. + */ \ No newline at end of file diff --git a/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/People.java b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/People.java new file mode 100644 index 0000000..4ccb46e --- /dev/null +++ b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/People.java @@ -0,0 +1,23 @@ +package ch.usi.inf.ajp22.flyable; + +public class People { + private String name; + private int age; + + public People(String name, int age) { + this.name = name; + this.age = age; + } + + public int getAge() { return this.age; } + + public String getName() { return this.name; } + + public void setName(String name) { + this.name = name; + } + + public void setAge(int age) { + this.age = age; + } +} diff --git a/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/PeopleComparator.java b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/PeopleComparator.java new file mode 100644 index 0000000..6d52b45 --- /dev/null +++ b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/PeopleComparator.java @@ -0,0 +1,7 @@ +package ch.usi.inf.ajp22.flyable; + +/** + * 3 Points + * TODO: Create a Comparator, named PeopleComparator, for People and its subtypes. + * Comparison should be done first by age and then by name length. + */ \ No newline at end of file diff --git a/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Wizard.java b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Wizard.java new file mode 100644 index 0000000..836fd4c --- /dev/null +++ b/hw2/code/src/main/java/ch/usi/inf/ajp22/flyable/Wizard.java @@ -0,0 +1,19 @@ +package ch.usi.inf.ajp22.flyable; + +/** + * 4 Points + * TODO: Let the class implement Flyable and Comparable. + * The comparison should be done using the method getSpeed. + */ +public class Wizard extends People { + + private int speed; + public Wizard(String name, int age) { + super(name, age); + this.speed = 100; + } + + public void setSpeed(int speed) { + this.speed = speed; + } +}