From f3897b55f5dd4206b3fbe77dcfa9ac72c3866e48 Mon Sep 17 00:00:00 2001 From: serotonine Date: Thu, 5 Mar 2026 09:43:58 +0100 Subject: [PATCH 1/6] Week 5: Generic and introduction exercises. --- src/generics/exercises/Exercise3.java | 93 --------------------------- 1 file changed, 93 deletions(-) delete mode 100644 src/generics/exercises/Exercise3.java diff --git a/src/generics/exercises/Exercise3.java b/src/generics/exercises/Exercise3.java deleted file mode 100644 index c89e3de..0000000 --- a/src/generics/exercises/Exercise3.java +++ /dev/null @@ -1,93 +0,0 @@ -package generics.exercises; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Exercise 3: Wildcards and PECS - * - * Tasks: - * 1. Write a method printList(List list) that prints any list - * - Try with different types of lists - * - * 2. Write a method sumList(List numbers) that calculates - * the sum of all numbers - * - Try with List, List, and mixed List - * - * 3. Write a method addThreeIntegers(List list) that adds - * the numbers 10, 20, 30 to the list - * - Try with List, List, and List - * - * 4. Write a method copy(List source, List dest) - * that copies all elements from source to destination - * - Demonstrate PECS principle - * - Try by copying List to List - * - Try by copying List to List - * - * 5. Write a method maxOfTwo(List list1, - * List list2) - * that returns the maximum element from both lists combined - * - Try with different number types - * - * 6. BONUS: Create a method that demonstrates why you can't add to - * List (producer) - * Write a comment explaining why - */ -public class Exercise3 { - - public static void main(String[] args) { - System.out.println("=== Task 1: Print Any List ===\n"); - - // TODO: Call printList with different types - - - System.out.println("\n=== Task 2: Sum Numbers ===\n"); - - // TODO: Call sumList - List integers = Arrays.asList(1, 2, 3, 4, 5); - List doubles = Arrays.asList(1.5, 2.5, 3.5); - - - System.out.println("\n=== Task 3: Add Integers ===\n"); - - // TODO: Call addThreeIntegers with different list types - List intList = new ArrayList<>(); - List numList = new ArrayList<>(); - List objList = new ArrayList<>(); - - - System.out.println("\n=== Task 4: Copy Lists (PECS) ===\n"); - - // TODO: Demonstrate PECS with copy method - - - System.out.println("\n=== Task 5: Max of Two Lists ===\n"); - - // TODO: Call maxOfTwo method - - - System.out.println("\n=== Task 6: BONUS - Why Can't Add? ===\n"); - - // TODO: Try to explain and demonstrate - - } - - // TODO: Task 1 - Implement printList - - - // TODO: Task 2 - Implement sumList - - - // TODO: Task 3 - Implement addThreeIntegers - - - // TODO: Task 4 - Implement copy method - - - // TODO: Task 5 - Implement maxOfTwo - - - // TODO: Task 6 - BONUS - -} From 21256b905381a8d7482a4254a98b4bd1c6ec28bc Mon Sep 17 00:00:00 2001 From: serotonine Date: Thu, 5 Mar 2026 10:11:27 +0100 Subject: [PATCH 2/6] Merging chaos. --- HYFBE-java-week-5.iml | 11 +++++++++++ resources/cat.jpeg | Bin 3904 -> 0 bytes resources/data.txt | 0 resources/introduction/copy.jpg | Bin 0 -> 37265 bytes resources/introduction/ks_serotonine.txt | 5 +++++ resources/introduction/kwiketa_skwirk.txt | 0 resources/introduction/new.txt | 0 resources/introduction/notes.txt | 6 ++++++ resources/introduction/source.jpg | Bin 0 -> 37265 bytes resources/introduction/students.txt | 0 resources/introduction/test.txt | 1 + 11 files changed, 23 insertions(+) create mode 100644 HYFBE-java-week-5.iml delete mode 100644 resources/cat.jpeg create mode 100644 resources/data.txt create mode 100644 resources/introduction/copy.jpg create mode 100644 resources/introduction/ks_serotonine.txt create mode 100644 resources/introduction/kwiketa_skwirk.txt create mode 100644 resources/introduction/new.txt create mode 100644 resources/introduction/notes.txt create mode 100644 resources/introduction/source.jpg create mode 100644 resources/introduction/students.txt create mode 100644 resources/introduction/test.txt diff --git a/HYFBE-java-week-5.iml b/HYFBE-java-week-5.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/HYFBE-java-week-5.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/resources/cat.jpeg b/resources/cat.jpeg deleted file mode 100644 index 50be1e0935114e5714e9263c7942036b53b81946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3904 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 diff --git a/resources/data.txt b/resources/data.txt new file mode 100644 index 0000000..e69de29 diff --git a/resources/introduction/copy.jpg b/resources/introduction/copy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5a1aff857a9c35317a1f3506fd86d7d45674c31 GIT binary patch literal 37265 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 Date: Sat, 7 Mar 2026 11:16:52 +0100 Subject: [PATCH 3/6] Week 5 : Live coding. --- src/inputoutput1/exercises/Config.java | 19 ++ src/inputoutput1/exercises/Exercise1.java | 16 +- src/live_coding/Coding1.java | 104 +++++++++++ src/live_coding/Coding2.java | 50 +++++ src/live_coding/Coding3.java | 38 ++++ src/live_coding/Exo1.java | 57 ++++++ src/live_coding/Exo2.java | 58 ++++++ src/live_coding/Exo3.java | 105 +++++++++++ src/live_coding/README.md | 213 ++++++++++++++++++++++ src/live_coding/Theory2.java | 72 ++++++++ src/live_coding/theory_1.txt | 66 +++++++ src/live_coding/theory_2.txt | 33 ++++ src/live_coding/theory_3.txt | 38 ++++ src/modern/examples/Students.java | 95 ++++++++++ src/modern/exercises/Exercise1.java | 9 +- src/modern/exercises/Exercise2.java | 9 + src/modern/exercises/Exercise3.java | 13 ++ src/modern/exercises/Exercise4.java | 12 ++ src/modern/exercises/Exercise5.java | 54 ++++++ src/modern/exercises/Exercise6.java | 51 ++++++ src/modern/exercises/Exercise7.java | 11 ++ 21 files changed, 1121 insertions(+), 2 deletions(-) create mode 100644 src/inputoutput1/exercises/Config.java create mode 100644 src/live_coding/Coding1.java create mode 100644 src/live_coding/Coding2.java create mode 100644 src/live_coding/Coding3.java create mode 100644 src/live_coding/Exo1.java create mode 100644 src/live_coding/Exo2.java create mode 100644 src/live_coding/Exo3.java create mode 100755 src/live_coding/README.md create mode 100644 src/live_coding/Theory2.java create mode 100644 src/live_coding/theory_1.txt create mode 100644 src/live_coding/theory_2.txt create mode 100644 src/live_coding/theory_3.txt create mode 100644 src/modern/examples/Students.java diff --git a/src/inputoutput1/exercises/Config.java b/src/inputoutput1/exercises/Config.java new file mode 100644 index 0000000..1417def --- /dev/null +++ b/src/inputoutput1/exercises/Config.java @@ -0,0 +1,19 @@ +package inputoutput1.exercises; + + +import java.nio.file.Path; + +public class Config { + + public static Path getResPath(){ + return Path.of(".", + "HYFBE-java-week-5", + "resources"); + } + public static Path getIntroPath(){ + return Path.of(".", + "HYFBE-java-week-5", + "resources", + "introduction"); + } +} diff --git a/src/inputoutput1/exercises/Exercise1.java b/src/inputoutput1/exercises/Exercise1.java index b41e840..520a5fa 100644 --- a/src/inputoutput1/exercises/Exercise1.java +++ b/src/inputoutput1/exercises/Exercise1.java @@ -11,14 +11,28 @@ package inputoutput1.exercises; import java.io.File; +import java.io.IOException; +import java.nio.file.Path; public class Exercise1 { public static void main(String[] args) { - File file = new File("resources" + File.separator + "info.txt"); + String path = Config.getIntroPath() + File.separator + "info.txt"; + File file = new File(path); + if(file.exists()){ + System.out.println("Absolute path: " + file.getAbsolutePath()); + System.out.println("Size: " + file.length() + " bytes"); + System.out.println("Is readable: " +file.canRead()); + System.out.println("Is writable: " +file.canWrite()); + } + + else{ + System.out.println("File not found!"); + } } } + diff --git a/src/live_coding/Coding1.java b/src/live_coding/Coding1.java new file mode 100644 index 0000000..8d9477d --- /dev/null +++ b/src/live_coding/Coding1.java @@ -0,0 +1,104 @@ +package live_coding; +/* +## Coding Question 1 -- Composition (Car and Engine) + +Create two classes: + +Engine, Car + +## Engine + +Fields: +```java +horsePower +``` +Method: + +start() + +When start() is called, print: + +Engine started + +## Car + +Fields: +```java +brand +``` +Engine engine + +Method: + +drive() + +## Requirements: + +A Car has an Engine (composition). + +When drive() is called: + +The engine should start + +Then print: +```java +Car is driving +``` +In main() + +Create an Engine + +Pass the engine to a Car + +Call drive() + +Example output: +```java +Engine started +Car is driving +``` +Discussion point: + +Why is this example composition instead of inheritance? + */ + +public class Coding1 { + static void main() { + +Car mercedes = new Car("Mercedes"); +mercedes.drive(); + } +} +class Engine{ + private int horsePower; + public Engine(int horsePower){ + setHorsePower(horsePower); + } + // START METHOD + public void start(){ + System.out.println("Engine started."); + } + // SETTER + public void setHorsePower(int horsePower) { + this.horsePower = horsePower; + } + //GETTER + public int getHorsePower() { + return horsePower; + } +} +class Car{ + private Engine engine = new Engine(15); + private String brand; + public Car(String brand){ + setBrand(brand); + } + public void drive(){ + engine.start(); + System.out.println("Car is driving"); + } + // SETTER. + public void setBrand(String brand) { + this.brand = brand; + } +} \ No newline at end of file diff --git a/src/live_coding/Coding2.java b/src/live_coding/Coding2.java new file mode 100644 index 0000000..548e8eb --- /dev/null +++ b/src/live_coding/Coding2.java @@ -0,0 +1,50 @@ +package live_coding; + +public class Coding2 { + static void main() { + int[][] temps = { + {3, 5, 2, 4}, // Week 1 + {6, 1, 0, 2}, // Week 2 + {4, 4, 3, -5} // Week 3 + }; + // 1.Return the average temperature of a single week. + int count = 1; + for (int[] week:temps){ + System.out.println("Week " + count + " average temperature: " + weekAverage(week) + "°C"); + count++; + } + // 2.Return the lowest temperature in the entire 2D array. + System.out.println("Coldest temp: " + coldestTemperature(temps)); + + } + // Return the average temperature of a single week. + public static int weekAverage(int[] week){ + int count = 0; + int lg = week.length; + if(lg == 0){ + return count; + } + + for(int temp:week){ + count += temp; + } + return count / lg; + } + // Return the lowest temperature in the entire 2D array. + public static int coldestTemperature(int[][] temps){ + int coldest = min(temps[0]); + for(int i=1; i services = new ArrayList<>(); + services.add(new Email()); + services.add(new SMS()); + for(NotificationService ns:services){ + notifyAllUsers(ns,"This is a beautiful day!"); + } + + + } + public static void notifyAllUsers(NotificationService ns, String message){ + if(ns instanceof SMS){ + System.out.println("New SMS: " + message); + } + else if(ns instanceof Email){ + System.out.println("New Email: " + message); + } + if(ns instanceof SMS){ + System.out.println(message); + } + + } +} + +abstract class NotificationService{ + +} + +class SMS extends NotificationService{ + +} +class Email extends NotificationService{} \ No newline at end of file diff --git a/src/live_coding/Exo1.java b/src/live_coding/Exo1.java new file mode 100644 index 0000000..ba93924 --- /dev/null +++ b/src/live_coding/Exo1.java @@ -0,0 +1,57 @@ +package live_coding; +/* +/* +Write a method: +public static int readPositiveInt(Scanner scanner) +Requirements: +Ask the user: +Enter a positive integer: +The program must: +Reject inputs that are not integers +Reject integers less than or equal to 0 +If the input is invalid, ask again. +The method should return the valid positive integer. +Example interaction: +Enter a positive integer: -3 Must be greater than 0 +Enter a positive integer: hello Invalid input +Enter a positive integer: 7 You entered: 7 + +In main(): +Create a Scanner +Call readPositiveInt(scanner) +Print the returned value + */ + + +import java.util.Scanner; + +public class Exo1 { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + int play = -1; + while(play < 0){ + System.out.print("Enter a positive integer: "); + + play = readPositiveInt(scanner); + if(play != -1){ + System.out.println("You entered " + play); + } + } + scanner.close(); + + } + public static int readPositiveInt(Scanner scanner){ + if(!scanner.hasNextInt()){ + System.out.println("Input not valid : Please enter an integer."); + scanner.next(); + return -1 ; + } + int nb = scanner.nextInt(); + if(nb <= 0 ){ + System.out.println("Input not valid : must be greater than 0."); + return -1; + } + return nb; + } +} diff --git a/src/live_coding/Exo2.java b/src/live_coding/Exo2.java new file mode 100644 index 0000000..73416d3 --- /dev/null +++ b/src/live_coding/Exo2.java @@ -0,0 +1,58 @@ +package live_coding; + +/* +Create a utility class: +Statistics +Add a static method: +public static double average(int... numbers) +Requirements: +If no numbers are provided, return 0. +Calculate the average value. +Print the maximum number. +Example usage: +double avg = Statistics.average(5, 8, 12, 3); +Example output: +Average: 7.0 Max: 12 +Bonus: +Convert the numbers varargs into a List and compute the maximum using Collections.max(). + + */ + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + + +public class Exo2 { + static void main(String[] args) { + double avg = Statistics.average(5, 8, 12, 3, 334); + + } +} +class Statistics{ + public static double average(int... numbers){ + int lg = numbers.length; + if(lg == 0){ + return 0d; + } + System.out.println(); + // Cast numbers + List integers = new ArrayList<>(); + //int max = Collections.max(numbers); + int count = 0; + for(int nb:numbers){ + // max = max < nb ? max:nb; + integers.add(nb); + count += nb; + } + int max = Collections.max(integers); + double avr = ((double) count / lg); + System.out.printf("Max: %d Average: %.2f %n", max, avr); + + return avr; + } + + +} diff --git a/src/live_coding/Exo3.java b/src/live_coding/Exo3.java new file mode 100644 index 0000000..9222580 --- /dev/null +++ b/src/live_coding/Exo3.java @@ -0,0 +1,105 @@ +package live_coding; +/* +/* +Interfaces + Polymorphism + Collections + (optional) sealed +Design a tiny logging system. +Create an interface: +interface Logger { + void log(String message); +} +Implement two loggers: +ConsoleLogger → prints: "[CONSOLE] " + message +FileLogger → writes logs into a file named app.log (append mode) +Create a class App with a field: +private final List loggers; +Constructor receives the list (constructor injection). +Method: +public void run() +Inside run(): +Log "App started" +Log "Doing work..." +Log "App finished" +In main(): +Create both loggers +Put them into a list +Create App and call run() +Why it's final boss: +Design +Discuss Interface and DIP +Bonus: +Make Logger a sealed interface permitting only those two implementations. + */ + + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class Exo3 { + static void main() { + String p = "./HYFBE-java-week-5/resources"; + ConsoleLogger cl = new ConsoleLogger(); + FileLogger fl = new FileLogger(p); + /* String mess = "Hello world!"; + cl.log(mess); + fl.log(mess);*/ + + App app = new App(cl,fl); + app.run(); + + } + +} +class App{ + private final List loggers = new ArrayList<>(); + public App(Logger... logger){ + for(Logger l:logger){ + this.loggers.add(l); + } + } + public void run(){ + System.out.println(); + for(Logger l:loggers){ + l.log("App have started \n"); + l.log("App doing work...\n"); + l.log("App finished."); + } + + } + +} +interface Logger { + void log(String message); +} +class ConsoleLogger implements Logger{ + @Override + public void log(String message) { + System.out.println("[CONSOLE] " + message); + } +} +class FileLogger implements Logger{ + private File file; + private String path; + + public FileLogger(String path){ + this.path = path + File.separator + "app.log"; + this.file = new File(path); + } + @Override + public void log(String message) { + try (FileWriter writer = new FileWriter(path, true)) + { + writer.write(message); + System.out.println("Data successfully written to file."); + } + catch (IOException e) + { + System.out.println("Error writing to file: " + e.getMessage()); + } + + + } +} + diff --git a/src/live_coding/README.md b/src/live_coding/README.md new file mode 100755 index 0000000..122ea55 --- /dev/null +++ b/src/live_coding/README.md @@ -0,0 +1,213 @@ +# Live Coding Exercise -- Group B + +This exercise contains two coding tasks and three theory questions. + +## Instructions + +First, solve the coding questions individually. + +During the pair session, ask your partner to solve one of your questions. + +Observe how they approach the problem and discuss the solution together. + +Focus not only on getting the correct result, but also on code structure and design decisions. + +## Coding Question 1 -- Composition (Car and Engine) + +Create two classes: + +Engine, Car + +## Engine + +Fields: +```java +horsePower +``` +Method: + +start() + +When start() is called, print: + +Engine started + +## Car + +Fields: +```java +brand +``` +Engine engine + +Method: + +drive() + +## Requirements: + +A Car has an Engine (composition). + +When drive() is called: + +The engine should start + +Then print: +```java +Car is driving +``` +In main() + +Create an Engine + +Pass the engine to a Car + +Call drive() + +Example output: +```java +Engine started +Car is driving +``` +Discussion point: + +Why is this example composition instead of inheritance? + +## Coding Question 2 -- Multi-Dimensional Arrays + +You are given a 2D array representing weekly temperatures: +```java +int[][] temps = { +{3, 5, 2, 4}, // Week 1 +{6, 1, 0, 2}, // Week 2 +{4, 4, 3, 5} // Week 3 +}; +``` +Task 1 + +Write a method: +```java +public static int weekAverage(int[] week) +``` +Return the average temperature of a single week. + +Task 2 + +Write another method: +```java +public static int coldestTemperature(int[][] temps) +``` +This method should return the lowest temperature in the entire 2D array. + +In main() + +Print the average temperature for each week + +Print the coldest temperature overall + +Example output: +```java +Week 1 average: 3 +Week 2 average: 2 +Week 3 average: 4 + +Coldest temperature: 0 +``` +## Coding Question 3 Notification System (This one is without hints) + +Design a small notification system. + +Your system should be able to send notifications through different communication channels. + +### Requirements + +Define a common abstraction that represents something capable of sending a notification message. + +Implement at least two different types of notification senders: + +One that sends notifications by email + +One that sends notifications by SMS + +Create a class called NotificationService. + +NotificationService should be able to send the same message through all available notification senders. + +The service should not depend on a specific sender implementation. + +Write a method: +```java +notifyAllUsers(String message) +``` +that sends the message through every available notification sender. + +In main(): + +Create the notification senders + +Register them in the service + +Send a message: + +"System update tonight" +Example Output +```java +Sending EMAIL: System update tonight +Sending SMS: System update tonight +``` +# Theory Questions +## Theory 1 -- Encapsulation vs Abstraction + +Explain the difference between: + +Encapsulation + +Abstraction + +### Hints: + +Encapsulation: + +Hiding internal data + +Controlling access using private fields and methods + +Abstraction: + +Hiding implementation details + +Showing only essential behavior through interfaces or abstract classes + +Give a simple Java example for both. + +## Theory 2 -- final and Immutability + +What does the keyword final mean for: + +a variable? + +a field? + +a reference to an object? + +Example: +```java +final List list = new ArrayList<>(); +``` +Why can we still add elements to the list? + +Explain the difference between final reference and immutable object. + +## Theory 3 -- protected Access Modifier + +What does protected mean in Java? + +Compare the following access levels: + +private +protected +public + +When would you choose protected instead of private? + +Give a small example involving inheritance. \ No newline at end of file diff --git a/src/live_coding/Theory2.java b/src/live_coding/Theory2.java new file mode 100644 index 0000000..c93e725 --- /dev/null +++ b/src/live_coding/Theory2.java @@ -0,0 +1,72 @@ +package live_coding; +/* +Theory 2 -- final and Immutability +What does the keyword final mean for: + +a variable? + +a field? + +a reference to an object? + +Example: + +final List list = new ArrayList<>(); +Why can we still add elements to the list? + +Explain the difference between final reference and immutable object. + + + */ + +import java.util.ArrayList; +import java.util.List; + +public class Theory2 { + static void main() { + System.out.println("Theory 2 -- final and Immutability"); + // What does the keyword final mean for: + // + //a variable? + + // the value of a final variable could not be changed. It's imutable'. + // Variable + System.out.println("The assigned value of a final variable/field cannot be reassigned."); + final String name = "Sophie"; + // name = "Babar"; // Generate an error => java: cannot assign a value to final variable name + + //a field? + // same for a field + System.out.println("When a method is declared final, it means:"); + System.out.println("A subclass cannot override this method."); + + // a reference to an object? + System.out.println("A final object reference cannot change but it could be modified."); + final List names = new ArrayList<>(); + names.add(name); // OK + //names = new ArrayList<>(); // + + Dog zia = new Dog(); + System.out.println(zia.sound); // OK + // System.out.println(zia.fur); // Raise an error => java: fur has private access in live_coding.Animal + zia.setFur(true); + System.out.println(zia.isFur()); + + } +} + +class Animal{ + protected String sound = "noise"; + private boolean fur = false; + public void setFur(boolean hasFur){ + this.fur = hasFur; + } + public boolean isFur(){ + return this.fur; + } +} + +class Dog extends Animal{ + + +} diff --git a/src/live_coding/theory_1.txt b/src/live_coding/theory_1.txt new file mode 100644 index 0000000..d777ea5 --- /dev/null +++ b/src/live_coding/theory_1.txt @@ -0,0 +1,66 @@ +/// Theory 1 -- Encapsulation vs Abstraction /// + +Explain the difference between: + +Encapsulation + +Abstraction + +### Hints: + +Encapsulation: + +Hiding internal data + +Controlling access using private fields and methods + +Abstraction: + +Hiding implementation details + +Showing only essential behavior through interfaces or abstract classes + +Give a simple Java example for both. + +// Encapsulation + +class Encapsulation{ + private int integer; + private String name; + public Encapsulation(String name, int integer){ + setInteger(integer); + setName(name); + } + // START METHOD + protected void protectedMethod(String mess){ + System.out.println(mess); + } + // SETTER + public void setInteger(int integer) { + this.integer = integer; + } + public void setName(String name) { + this.name = name; + } + //GETTER + public int getInteger() { + return this.integer; + } + public String getName() { + return this.name; + } +} + +// Abstraction + +abstract class NotificationService{ + +protected String getMessage(String message){ +return message;} + +} + +class SMS extends NotificationService{ + +} +class Email extends NotificationService{} \ No newline at end of file diff --git a/src/live_coding/theory_2.txt b/src/live_coding/theory_2.txt new file mode 100644 index 0000000..060e161 --- /dev/null +++ b/src/live_coding/theory_2.txt @@ -0,0 +1,33 @@ +// Theory 2 -- final and Immutability // + // What does the keyword final mean for: + // + //a variable? + + // the value of a final variable could not be changed. It's imutable'. + // Variable + System.out.println("The assigned value of a final variable/field cannot be reassigned."); + final String name = "Sophie"; + name = "Babar"; // Generate an error => java: cannot assign a value to final variable name + + + // + //a field? + // same for a field + When a method is declared final, it means: + A subclass cannot override this method. + + + // a reference to an object? + A final object reference cannot change but it could be modified. + final List names = new ArrayList<>(); + names.add(name); // OK + + // Explain the difference between final reference and immutable object. + The state of an immutable cannot change. + String name = "Sophie"; + name += "Babar"; => create new Object; + An ArrayList is mutable => its content could be change + A final ArrayList's reference could not be changed. + final List names = new ArrayList<>(); + names = new ArrayList<>(); // raise an error => java: cannot assign a value to final variable names + An Integer is immutable => its content could not be changed. diff --git a/src/live_coding/theory_3.txt b/src/live_coding/theory_3.txt new file mode 100644 index 0000000..1e1f7b9 --- /dev/null +++ b/src/live_coding/theory_3.txt @@ -0,0 +1,38 @@ +// Theory 3 -- protected Access Modifier // + +What does protected mean in Java? +In Java, a protected field or method can be accessed by subclasses of the class and by other classes in the same package. + +Compare the following access levels: + +private +In Java, a private field or method cannot be accessed from outside its class. +protected +In Java, a protected field or method can be accessed by subclasses of the class and by other classes in the same package. +public +In Java, a public field or method can be accessed by any class from any package. + +When would you choose protected instead of private? +When we want ONLY a subclass or a package class to access or override a method / field. + +Give a small example involving inheritance. + +class Animal{ + protected String sound = "noise"; + private boolean fur = false; + public void setFur(boolean hasFur){ + this.fur = hasFur; + } + public boolean isFur(){ + return this.fur; + } +} + +class Dog extends Animal{} + +//// +Dog zia = new Dog(); +System.out.println(zia.sound); // OK +System.out.println(zia.fur); // Raise an error => java: fur has private access in live_coding.Animal +zia.setFur(true); // OK +System.out.println(zia.isFur()); // OK \ No newline at end of file diff --git a/src/modern/examples/Students.java b/src/modern/examples/Students.java new file mode 100644 index 0000000..f61d2e6 --- /dev/null +++ b/src/modern/examples/Students.java @@ -0,0 +1,95 @@ +package modern.examples; + +/* +OOP Design Challenge — Student Ranking System +You are building a small student ranking system for a school. +The school wants to display students sorted by their grades, from highest to lowest. +Your task is to design a system that makes this possible. + +Step 1 — Create the Student class +Create a class called Student. +Each student has: +name +gradeRequirements: +fields must be private +provide a constructor +provide getters + +override toString() so students can be printed nicely +Example: +Alice (90) +Bob (75) +Charlie (82) + +Step 2 — Create some students +In main(): +create a List + +add at least 5 students +Example: + +List students = new ArrayList<>(); + +students.add(new Student("Alice", 90)); +students.add(new Student("Bob", 75)); +students.add(new Student("Charlie", 82)); +students.add(new Student("Emma", 65)); +students.add(new Student("David", 80)); + +Step 3 — Sort the students +The school wants to print students from highest grade to lowest grade. +Your task: +Sort the students by gradeThink about the following questions: +How can Java know which student is greater or smaller? + +How can two Student objects be compared? +Where should that comparison logic live? +After sorting, print the list. +Expected output: +Students ranked by grade: + +Alice (90) +Charlie (82) +David (80) +Bob (75) +Emma (65) + */ + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class Students { + static void main() { + String[] names = new String[]{"Bob", "Andrei", "Capucine", "Gomathi", "Emma", "Preeti", "Alison", "john"," ", "basel", "Kien"}; + Random rd = new Random(); + List students = new ArrayList<>(); + for(String name:names){ + try{ + students.add(new Student(name, rd.nextInt(101))); + } + catch(IllegalArgumentException e){ + System.out.println(e.getMessage()); + } + } + } + +} + + +// 1.Class student +record Student(String name, int grade){ + public Student { + if (name == null || name.isBlank()) { + throw new IllegalArgumentException("Name cannot be blank, please fix!"); + } + if (grade <= 0) { + throw new IllegalArgumentException("Grade cannot be negative or null, please fix!"); + } + } + // Override toString() so students can be printed nicely E.g. Bob (75). + public String toString(){ + return STR."\{this.name()} (\{this.grade()})"; + } + +} \ No newline at end of file diff --git a/src/modern/exercises/Exercise1.java b/src/modern/exercises/Exercise1.java index 101e20a..bb3afe9 100644 --- a/src/modern/exercises/Exercise1.java +++ b/src/modern/exercises/Exercise1.java @@ -10,6 +10,13 @@ public class Exercise1 { public static void main(String[] args) { - + System.out.println("Sum => " + sum(10,30,5,4,1)); + } + public static int sum(int... numbers){ + int result = 0; + for(int nb:numbers ){ + result +=nb; + } + return result; } } diff --git a/src/modern/exercises/Exercise2.java b/src/modern/exercises/Exercise2.java index 389ab8c..9c729bb 100644 --- a/src/modern/exercises/Exercise2.java +++ b/src/modern/exercises/Exercise2.java @@ -10,6 +10,15 @@ public class Exercise2 { public static void main(String[] args) { + System.out.println("Join => " + join("Once", "upon","a","time")); } + public static StringBuilder join(String... words){ + StringBuilder result = new StringBuilder(); + for(String str:words ){ + result.append(str + " "); + } + return result; + } + } diff --git a/src/modern/exercises/Exercise3.java b/src/modern/exercises/Exercise3.java index f2d42cb..7de306a 100644 --- a/src/modern/exercises/Exercise3.java +++ b/src/modern/exercises/Exercise3.java @@ -10,6 +10,19 @@ public class Exercise3 { public static void main(String[] args) { + // Instance of interface Printer. + Printer printer = new Printer(){ + + @Override + public void print(String text) { + System.out.println("Text: " + text); + } + }; + printer.print("Hello World!"); } } + +interface Printer{ + void print(String text); +} diff --git a/src/modern/exercises/Exercise4.java b/src/modern/exercises/Exercise4.java index 48ce715..41c129a 100644 --- a/src/modern/exercises/Exercise4.java +++ b/src/modern/exercises/Exercise4.java @@ -10,6 +10,18 @@ public class Exercise4 { public static void main(String[] args) { + Comparator comparator = new Comparator<>() { + @Override + public int compare(String a, String b) { + return a.length() - b.length(); + } + }; + int c = comparator.compare("Roberta", "Mitchumette"); + System.out.println("Compare: " + c ); + } } +interface Comparator{ + public int compare(T a, T b); +} diff --git a/src/modern/exercises/Exercise5.java b/src/modern/exercises/Exercise5.java index 163e86f..dc6a277 100644 --- a/src/modern/exercises/Exercise5.java +++ b/src/modern/exercises/Exercise5.java @@ -11,6 +11,60 @@ public class Exercise5 { public static void main(String[] args) { + Product product = new Product.Builder() + .name("socks") + .price(22d) + .inStock(true) + .build(); + System.out.printf("%s Price: %.2f %s", product.getName().toUpperCase(), product.getPrice(), product.isInStock()? "in stock":"not in stock"); + + } +} + +class Product{ + String name; + Double price; + boolean inStock; + public Product(Builder builder){ + this.name = builder.name; + this.price = builder.price; + this.inStock = builder.inStock; + } + // GETTERS + + public String getName() { + return name; + } + + public Double getPrice() { + return price; + } + + public boolean isInStock() { + return inStock; + } + + // BUILDER + public static class Builder{ + String name; + Double price; + boolean inStock; + public Builder name(String name){ + this.name = name; + return this; + } + public Builder price(Double price){ + this.price = price; + return this; + } + public Builder inStock(boolean inStock){ + this.inStock = inStock; + return this; + } + + public Product build() { + return new Product(this); + } } } diff --git a/src/modern/exercises/Exercise6.java b/src/modern/exercises/Exercise6.java index b6f69fd..51c41f1 100644 --- a/src/modern/exercises/Exercise6.java +++ b/src/modern/exercises/Exercise6.java @@ -11,6 +11,57 @@ public class Exercise6 { public static void main(String[] args) { + Shape rec = new Rectangle(10d,3d); + Shape circle = new Circle(32d); + printArea(rec); + printArea(circle); + } + + public static void printArea(Shape shape){ + if(shape instanceof Rectangle rec){ + System.out.println("Rectangle aera = " + rec.getWidth() + " * " + rec.getHeight() + " = " + rec.aera()); + } + if(shape instanceof Circle cir){ + System.out.println("Circle aera = " + Math.PI + " * " + cir.getRadius() + " * " + cir.getRadius() + " = " + cir.aera()); + } + } + +} +sealed interface Shape permits Circle, Rectangle { + Double aera(); +} + +final class Circle implements Shape { +Double radius; +public Circle(Double radius){ + this.radius = radius; +} + @Override + public Double aera() { + return Math.PI * radius * radius; + } + + public Double getRadius() { + return radius; + } +} +final class Rectangle implements Shape{ +Double width; +Double height; + public Rectangle(Double w, Double h){ + this.width = w; + this.height= h; + } + @Override + public Double aera() { + return width * height; + } + + public Double getWidth() { + return width; + } + public Double getHeight() { + return height; } } diff --git a/src/modern/exercises/Exercise7.java b/src/modern/exercises/Exercise7.java index d0d8c55..f1d6e13 100644 --- a/src/modern/exercises/Exercise7.java +++ b/src/modern/exercises/Exercise7.java @@ -12,6 +12,17 @@ public class Exercise7 { public static void main(String[] args) { + Product2 chocoEggs = new Product2("Chocolate eggs", 34d); + Product2 otherChocoEggs = new Product2("Chocolate eggs", 34d); + Product2 orientalDelices = new Product2("Oriental delices", 12d); + System.out.println(orientalDelices.name() + " " + orientalDelices.price()); + System.out.println(chocoEggs.name() + " " + chocoEggs.price()); + System.out.println(chocoEggs.toString()); + System.out.println(orientalDelices.toString()); + System.out.println(chocoEggs.equals(otherChocoEggs)); + System.out.println(chocoEggs.equals(orientalDelices)); } } + +record Product2(String name, double price){}; From 1dc62aa2a70ff3b7d2ef6f38ca1a8e3624546731 Mon Sep 17 00:00:00 2001 From: serotonine Date: Sat, 7 Mar 2026 13:26:50 +0100 Subject: [PATCH 4/6] Week 5 : inputoutput1 redo exercises. --- resources/introduction/notes.txt | 4 --- .../{copy.jpg => smiling_pit.jpg} | Bin .../{source.jpg => smiling_pit_copy.jpg} | Bin resources/test/subtest/text.txt | 1 + src/inputoutput1/examples/Example1.java | 14 ++++++++-- src/inputoutput1/exercises/Exercise2.java | 18 ++++++++++--- src/inputoutput1/exercises/Exercise3.java | 24 +++++++++++++++++- src/inputoutput1/exercises/Exercise4.java | 11 +++++++- src/inputoutput1/exercises/Exercise5.java | 21 ++++++++++++--- 9 files changed, 78 insertions(+), 15 deletions(-) rename resources/introduction/{copy.jpg => smiling_pit.jpg} (100%) rename resources/introduction/{source.jpg => smiling_pit_copy.jpg} (100%) create mode 100644 resources/test/subtest/text.txt diff --git a/resources/introduction/notes.txt b/resources/introduction/notes.txt index 4f3f897..58c2f37 100644 --- a/resources/introduction/notes.txt +++ b/resources/introduction/notes.txt @@ -1,6 +1,2 @@ Java I/O is powerful. Streams make reading and writing easier. - -This is an overwrite. - -This is an overwrite. diff --git a/resources/introduction/copy.jpg b/resources/introduction/smiling_pit.jpg similarity index 100% rename from resources/introduction/copy.jpg rename to resources/introduction/smiling_pit.jpg diff --git a/resources/introduction/source.jpg b/resources/introduction/smiling_pit_copy.jpg similarity index 100% rename from resources/introduction/source.jpg rename to resources/introduction/smiling_pit_copy.jpg diff --git a/resources/test/subtest/text.txt b/resources/test/subtest/text.txt new file mode 100644 index 0000000..e925143 --- /dev/null +++ b/resources/test/subtest/text.txt @@ -0,0 +1 @@ +Une souris verte... \ No newline at end of file diff --git a/src/inputoutput1/examples/Example1.java b/src/inputoutput1/examples/Example1.java index d9e384d..b270f94 100644 --- a/src/inputoutput1/examples/Example1.java +++ b/src/inputoutput1/examples/Example1.java @@ -7,11 +7,12 @@ package inputoutput1.examples; import java.io.File; +import java.io.FileWriter; +import java.io.IOException; public class Example1 { - public static void main(String[] args) - { + public static void main(String[] args) throws IOException { File file = new File("notes.txt"); if (file.exists()) @@ -21,6 +22,15 @@ public static void main(String[] args) else { System.out.println("File not found!"); + try{ + FileWriter writer = new FileWriter(file); + writer.write("Hello World!"); + + } + catch (IOException e){ + System.out.println(e.getMessage()); + } + } } } \ No newline at end of file diff --git a/src/inputoutput1/exercises/Exercise2.java b/src/inputoutput1/exercises/Exercise2.java index dad13fd..e3897ee 100644 --- a/src/inputoutput1/exercises/Exercise2.java +++ b/src/inputoutput1/exercises/Exercise2.java @@ -8,13 +8,25 @@ package inputoutput1.exercises; import java.io.File; +import java.io.FileWriter; import java.io.IOException; public class Exercise2 { - public static void main(String[] args) - { - File file = new File("resources" + File.separator + "students.txt"); + public static void main(String[] args) { + File file = new File(STR."\{Config.getIntroPath()}\{File.separator}students.txt"); + if (file.exists()) { + System.out.println("File exists: " + file.getAbsolutePath()); + } else { + System.out.println("File not found!"); + try(FileWriter writer = new FileWriter(file)) { + writer.write("Hello World!"); + System.out.println("File created successfully!"); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + + } } } diff --git a/src/inputoutput1/exercises/Exercise3.java b/src/inputoutput1/exercises/Exercise3.java index c2b3c28..303bb6f 100644 --- a/src/inputoutput1/exercises/Exercise3.java +++ b/src/inputoutput1/exercises/Exercise3.java @@ -13,8 +13,30 @@ public class Exercise3 { + public static void main(String[] args) { - File directory = new File("resources"); + String path = Config.getResPath() + File.separator; + File file = new File(path); + if(file.exists()){ + for(File f:file.listFiles()){ + listFiles(f, 1); + } + } + + } + protected static void listFiles(File file, int depth){ + if(file.isDirectory()){ + System.out.println("-".repeat(depth)+ "[DIR] " + file.getName()); + + for(File j:file.listFiles()){ + listFiles(j, depth + 1); + } + } + else { + System.out.println("-".repeat(depth) + "[FILE] " + file.getName()); + // System.out.println("[PARENT] " + file.getParentFile()); + } + } } diff --git a/src/inputoutput1/exercises/Exercise4.java b/src/inputoutput1/exercises/Exercise4.java index 706e4f2..489d90b 100644 --- a/src/inputoutput1/exercises/Exercise4.java +++ b/src/inputoutput1/exercises/Exercise4.java @@ -17,7 +17,16 @@ public class Exercise4 { public static void main(String[] args) { - String filePath = "resources" + File.separator + "notes.txt"; + String path = STR."\{Config.getIntroPath()}\{File.separator}notes.txt" ; + File file = new File(path); + try(FileWriter writer = new FileWriter(file, true)){ + writer.write("Java I/O is powerful.\n"); + writer.write("Streams make reading and writing easier.\n"); + System.out.println("File written successfully!"); + } + catch (IOException e){ + System.out.println("Error " + e.getMessage()); + } } diff --git a/src/inputoutput1/exercises/Exercise5.java b/src/inputoutput1/exercises/Exercise5.java index 31123e8..66cf159 100644 --- a/src/inputoutput1/exercises/Exercise5.java +++ b/src/inputoutput1/exercises/Exercise5.java @@ -8,15 +8,28 @@ package inputoutput1.exercises; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; +import java.io.*; public class Exercise5 { public static void main(String[] args) { - //try-with-resources can take more than one resource, just use ; between them + String source_path = STR."\{Config.getIntroPath()}\{File.separator}smiling_pit.jpg" ; + String copy_path = STR."\{Config.getIntroPath()}\{File.separator}smiling_pit_copy.jpg" ; + try( + FileInputStream in = new FileInputStream(source_path); + FileOutputStream out = new FileOutputStream(copy_path)){ + int byteData; + while((byteData = in.read()) != -1){ + out.write(byteData); + } + + + System.out.println("File copied successfully!"); + } + catch (IOException e){ + System.out.println("Error " + e.getMessage()); + } } } From 5d6a4e2f6ffa671ef924ea86ff87e63050b36996 Mon Sep 17 00:00:00 2001 From: serotonine Date: Sat, 7 Mar 2026 18:16:10 +0100 Subject: [PATCH 5/6] Week 5 : Generics exercises. --- src/generics/exercises/Exercise2.java | 143 ++++++++++++++++++++------ src/generics/exercises/Exercise5.java | 104 ++++++++++++++----- 2 files changed, 189 insertions(+), 58 deletions(-) diff --git a/src/generics/exercises/Exercise2.java b/src/generics/exercises/Exercise2.java index 9170a9d..eb27ce4 100644 --- a/src/generics/exercises/Exercise2.java +++ b/src/generics/exercises/Exercise2.java @@ -1,6 +1,7 @@ package generics.exercises; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -31,50 +32,126 @@ public class Exercise2 { public static void main(String[] args) { + String[] words = {"Hello", "World", "Java", "Zia petit toutou"}; + Integer[] numbers = {0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + Double[] doubles = {133.99, 24.50, 33.99, 4d, 575.98}; + List numbersList = new ArrayList<>(List.of(numbers)); + List doublesList = new ArrayList<>(List.of(doubles)); + System.out.println("=== Task 1: Print Array ===\n"); - - // TODO: Call printArray method - String[] words = {"Hello", "World", "Java"}; - Integer[] numbers = {1, 2, 3, 4, 5}; - - + printArray(words); printArray(numbers); printArray(doubles); + System.out.println("\n=== Task 2: Reverse Array ===\n"); - - // TODO: Call reverse method - - + Integer[] reverseNumbers = reverse(numbers); + System.out.println(Arrays.toString(reverseNumbers)); + Double[] reverseDoubles = reverse(doubles); + System.out.println(Arrays.toString(reverseDoubles)); + System.out.println("\n=== Task 3: Find Minimum ===\n"); - - // TODO: Call findMin method - List integers = new ArrayList<>(); - integers.add(10); - integers.add(5); - integers.add(20); - integers.add(3); - + System.out.println("Min: " + findMin(numbersList)); + System.out.println("Min: " + findMin(doublesList)); + System.out.println("\n=== Task 4: Calculator ===\n"); - - // TODO: Create and use Calculator instances - + Calculator ci = new Calculator<>(numbers); + System.out.println("[ADD] " + ci.add()); + System.out.println("[SUBSTRACT] " + ci.substract()); + System.out.println("[MULTIPLY] " + ci.multiply()); + Calculator cd = new Calculator<>(doubles); + System.out.println("[ADD] " + cd.add()); + System.out.println("[SUBSTRACT] " + cd.substract()); + System.out.printf("[MULTIPLY] %.2f %n",cd.multiply()); + + System.out.println("\n=== Task 5: Count Greater Than ===\n"); - - // TODO: Call countGreaterThan method - + System.out.printf("Greater elements: %d%n", countGreaterThan(words, "Vernaculaire")); + System.out.printf("Greater elements: %d%n", countGreaterThan(numbers, 5)); + System.out.printf("Greater elements: %d%n", countGreaterThan(doubles, 100d)); + } - // TODO: Task 1 - Implement printArray method - - - // TODO: Task 2 - Implement reverse method - - - // TODO: Task 3 - Implement findMin method + // Task 1 - Implement printArray method + public static void printArray(T[] array){ + if(array.length == 0){ + System.out.println("Empty array."); + return; + } + for (T item:array){ + System.out.print(item + " "); + } + System.out.println(); + } + + // Task 2 - Implement reverse method + public static T[] reverse(T[] array){ + + T [] reverse = array; + int lg = reverse.length -1; + for(int i = 0; i<= lg / 2; i++){ + T temp = reverse[i]; + reverse[i] = reverse[lg-i]; + reverse[lg-i] = temp; + } + return reverse; + } - // TODO: Task 5 - Implement countGreaterThan method + // Task 3 - Implement findMin method + public static double findMin(List numbers){ + double min = numbers.get(0).doubleValue(); + for(Number item:numbers){ + double i = item.doubleValue(); + min = min < i ? min: i; + } + return min; + } + + + // Task 5 - Implement countGreaterThan method + public static > int countGreaterThan(T[] array, T element ){ + int count = 0; + for(T item:array){ + if( element.compareTo(item) < 0){ + System.out.println(item + " is greater than " + element); + count++; + } + } + return count; + } } -// TODO: Task 4 - Create Calculator class here +// Task 4 - Create Calculator class here +class Calculator{ + T[] array; + public Calculator(T[] array){ + this.array = array; + } + protected double add(){ + double count = this.array[0].doubleValue(); + int lg = this.array.length; + for (int i = 1; i < lg; i++) { + count += this.array[i].doubleValue(); + } + return count; + } + protected double substract(){ + double count = this.array[0].doubleValue(); + int lg = this.array.length; + for (int i = 1; i < lg; i++) { + count -= this.array[i].doubleValue(); + } + return count; + } + protected double multiply(){ + double count = this.array[0].doubleValue(); + int lg = this.array.length ; + for (int i = 1; i < lg; i++) { + count *= this.array[i].doubleValue(); + } + return count; + } + +} + diff --git a/src/generics/exercises/Exercise5.java b/src/generics/exercises/Exercise5.java index 6ee4345..a178f8a 100644 --- a/src/generics/exercises/Exercise5.java +++ b/src/generics/exercises/Exercise5.java @@ -1,6 +1,8 @@ package generics.exercises; +import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -29,36 +31,88 @@ public class Exercise5 { public static void main(String[] args) { + List words = new ArrayList<>(Arrays.asList("Bernadette", "Scoubidou", "Dinausor")); + List ints = new ArrayList<>(Arrays.asList(518,-43,89,45)); + List dbs = new ArrayList<>(Arrays.asList(55d, -89.89, 54.87)); + List ldt = new ArrayList<>(Arrays.asList( + LocalDateTime.of(2024, 6, 5, 14, 30), + LocalDateTime.now(), + LocalDateTime.of(2027,1,1,1,1) + )); System.out.println("=== Using Box Class ===\n"); - - // TODO: Task 2 - Create and use Box instances - - + Box boxD = new Box<>(5843.879); + Box boxLdt = new Box<>(LocalDateTime.now()); + System.out.println(boxLdt.toString()); + System.out.println(boxD.toString()); + System.out.println("\n=== Using printAll ===\n"); - - // TODO: Task 3 - Call printAll with different lists - - + Box.printAll(words); + Box.printAll(ints); + Box.printAll(dbs); + Box.printAll(ldt); + System.out.println("\n=== Using addDefaults ===\n"); - - // TODO: Task 4 - Call addDefaults - - + System.out.println(Box.addDefaults(ints)); + List dbN = new ArrayList<>(Arrays.asList(55, -89.89, 54.87)); + System.out.println(Box.addDefaults(dbN)); + System.out.println("\n=== Using sumNumbers ===\n"); - - // TODO: Task 5 - Call sumNumbers - + System.out.printf("sumNumbers: %.2f %n" , Box.sumNumbers(dbN)); + } - - // TODO: Task 3 - Implement printAll method - - - // TODO: Task 4 - Implement addDefaults method - - - // TODO: Task 5 - Implement sumNumbers method - } -// TODO: Task 1 - Create Box class here +// Task 1 - Create Box class here +class Box{ + private T value; + public Box(T value){ + setValue(value); + } + // Task 3 - Implement printAll method + public static void printAll(List items) { + + // that prints each element + int count = 0; + for (Object item : items) { + if (count < items.size() - 1) { + System.out.print(item + ", "); + } + else { + System.out.print(item + "\n"); + } + count++; + } + } + // Task 4 - Implement addDefaults method + public static List addDefaults(List numbers) { + numbers.add(1); + numbers.add(2); + numbers.add(3); + return numbers; + } + // Task 5 - Implement sumNumbers method + public static double sumNumbers(List numbers) { + // that returns the sum as double + double output = 0d; + for (Number item:numbers) { + output += item.doubleValue(); + } + return output; + } + // GETTER & SETTER + public T getValue() { + return this.value; + } + + public void setValue(T value) { + this.value = value; + } + // toString + @Override + public String toString() { + //return this.getValue().toString(); + // Better + return String.valueOf(this.value); + } +} From ecb25316c5126f784c7c228b4786a60b0b8ec768 Mon Sep 17 00:00:00 2001 From: serotonine Date: Mon, 9 Mar 2026 08:54:14 +0100 Subject: [PATCH 6/6] Week 5 : Generics exercises. --- src/modern/exercises/RecordExercise.java | 97 ++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/modern/exercises/RecordExercise.java diff --git a/src/modern/exercises/RecordExercise.java b/src/modern/exercises/RecordExercise.java new file mode 100644 index 0000000..6dc3b02 --- /dev/null +++ b/src/modern/exercises/RecordExercise.java @@ -0,0 +1,97 @@ +package modern.exercises; + +import java.util.ArrayList; +import java.util.List; + +public class RecordExercise { + public static void main(String[] args) { + try{ + List students = new ArrayList<>(List.of( + new Student(1, "Robert", 5d), + new Student(2, "Preeti", 15d), + new Student(3, "John", 17d), + new Student(4, "Alison", 12d), + new Student(5, "Catherine", 19d), + new Student(6, "Gomathi", 7d), + new Student(7, "Helena", 0d), + new Student(8, "Basel", 14d), + new Student(9, "Julie", 16d) + )); + System.out.printf("Average grade: %.2f %n",averageGrade(students)); + System.out.println("Students List"); + print(students); + System.out.println("Best student:\n" + bestStudent(students).toString()); + // Curve + Student helena = students.get(6); + students.set(6, helena.curve(12d)); + System.out.println(students.get(6).toString()); + + + } catch (IllegalArgumentException e) { + System.out.println("Error " + e.getMessage()); + } + } + // Methods. + public static double averageGrade(List students){ + double grades = 0d; + for(Student student:students){ + grades += student.grade(); + } + return grades / students.size(); + } + + public static void print(List students) { + for (Student student : students) { + System.out.println("- " + student); + } + } + public static Student bestStudent(List students){ + double max = students.get(0).grade(); + Student best = students.get(0); + for (Student student : students) { + if(student.grade() > max){ + max = student.grade(); + best = student; + } + } + return best; + } +} +record Student(int id, String name, double grade){ + public Student { + if (name == null || name.isBlank()) { + throw new IllegalArgumentException(id + " Student name must be filled"); + } + if (grade < 0d || grade > 20d) { + throw new IllegalArgumentException(name + "'s grade must be in beetween 0,00 and 20,00"); + } + } + public boolean hasPassed(){ + return grade >= 10d; + } + public String gradeMention(){ + if (grade >= 16){ return "Excellent"; } + else if(grade >= 14){ + return "Very Good"; + } + else if(grade >= 12){ + return "Good"; + } + else if(grade >= 10){ + return "Pass"; + } + else{ + return "Fail"; + } + } + + @Override + public String toString() { + return name() + " grade: " + grade() + " mention: " + gradeMention(); + } + public Student curve(double points){ + double increase = grade() + points; + double bonus = increase <= 20 ? increase : 20; + return new Student(id(), name(), bonus ); + } +}