diff --git a/pom.xml b/pom.xml
index 111501f..8ed2bb9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,8 +9,8 @@
1.0-SNAPSHOT
- 23
- 23
+ 21
+ 21
UTF-8
diff --git a/src/main/java/Rational/Rational.java b/src/main/java/Rational/Rational.java
index 7bd840e..b1f44d4 100644
--- a/src/main/java/Rational/Rational.java
+++ b/src/main/java/Rational/Rational.java
@@ -54,42 +54,43 @@ public class Rational {
// TODO: Instance method - this - other
// Formula: a/b - c/d = (a*d - c*b) / (b*d)
public Rational subtract(Rational other) {
- // YOUR CODE HERE
- return null; // Remove this line when implemented
+ int newNumerator = this.numerator * other.denominator - other.numerator * this.denominator;
+ int newDenominator = this.denominator * other.denominator;
+ return new Rational(newNumerator, newDenominator);
}
// TODO: Static method - r1 - r2
public static Rational subtract(Rational r1, Rational r2) {
- // YOUR CODE HERE
- return null; // Remove this line when implemented
+ return r1.subtract(r2);
}
// TODO: Instance method - this * other
// Formula: (a/b) * (c/d) = (a*c) / (b*d)
public Rational multiply(Rational other) {
- // YOUR CODE HERE
- return null; // Remove this line when implemented
+ int newNumerator = this.numerator * other.numerator;
+ int newDenominator = this.denominator * other.denominator;
+ return new Rational(newNumerator, newDenominator);
}
// TODO: Static method - r1 * r2
public static Rational multiply(Rational r1, Rational r2) {
- // YOUR CODE HERE
- return null; // Remove this line when implemented
+ return r1.multiply(r2);
}
// TODO: Instance method - this / other
// Formula: (a/b) รท (c/d) = (a*d) / (b*c)
public Rational divide(Rational other) {
- // YOUR CODE HERE
- // HINT: Division is multiplication by reciprocal
- // Don't forget to check if other.numerator is zero!
- return null; // Remove this line when implemented
+ if (other.numerator == 0) {
+ throw new ArithmeticException("Cannot divide by zero");
+ }
+ int newNumerator = this.numerator * other.denominator;
+ int newDenominator = this.denominator * other.numerator;
+ return new Rational(newNumerator, newDenominator);
}
// TODO: Static method - r1 / r2
public static Rational divide(Rational r1, Rational r2) {
- // YOUR CODE HERE
- return null; // Remove this line when implemented
+ return r1.divide(r2);
}
// PROVIDED - String representation
diff --git a/src/main/java/movie/apis/Main.java b/src/main/java/movie/apis/Main.java
index f0e713d..af511c7 100644
--- a/src/main/java/movie/apis/Main.java
+++ b/src/main/java/movie/apis/Main.java
@@ -21,15 +21,15 @@ public class Main {
break;
case 2:
- // TODO: Get genre ID and page from user, then call movieService.displayMoviesByGenre()
-
+ Long genreId = getLongInput("Enter genre ID: ");
+ Long page = getLongInput("Enter page number: ");
+ movieService.displayMoviesByGenre(genreId, page);
break;
case 3:
- // TODO (BONUS): Get movie ID from user, then call movieService.displayMovieDetails()
-
-
+ Long movieId = getLongInput("Enter movie ID: ");
+ movieService.displayMovieDetails(movieId);
break;
case 0:
diff --git a/src/main/java/movie/apis/Movie.java b/src/main/java/movie/apis/Movie.java
index 969774a..6b82baf 100644
--- a/src/main/java/movie/apis/Movie.java
+++ b/src/main/java/movie/apis/Movie.java
@@ -4,7 +4,8 @@ import java.util.List;
/**
* Model class representing a movie
- * Fields: id, title, genres, images
+ * Fields: id, title, genres, images, year, imdb_rating, country
+ * Bonus fields: actors, awards, director, imdb_id, imdb_votes, metascore, plot, rated, released, runtime, type, writer
*/
public class Movie {
@@ -16,9 +17,188 @@ public class Movie {
private String imdb_rating;
private String country;
- // TODO: Create a constructor with all fields
+ // Bonus fields
+ private String actors;
+ private String awards;
+ private String director;
+ private String imdb_id;
+ private String imdb_votes;
+ private String metascore;
+ private String plot;
+ private String rated;
+ private String released;
+ private String runtime;
+ private String type;
+ private String writer;
- // TODO: Create a simple constructor with id and title only
+ // Constructor with all fields
+ public Movie(Long id, String title, List genres, List images, String year, String imdb_rating, String country) {
+ this.id = id;
+ this.title = title;
+ this.genres = genres;
+ this.images = images;
+ this.year = year;
+ this.imdb_rating = imdb_rating;
+ this.country = country;
+ }
- // TODO: Create getters and setters for all fields
-}
\ No newline at end of file
+ // Simple constructor with id and title only
+ public Movie(Long id, String title) {
+ this.id = id;
+ this.title = title;
+ }
+
+ // Getters and setters for all fields
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public List getGenres() {
+ return genres;
+ }
+
+ public void setGenres(List genres) {
+ this.genres = genres;
+ }
+
+ public List getImages() {
+ return images;
+ }
+
+ public void setImages(List images) {
+ this.images = images;
+ }
+
+ public String getYear() {
+ return year;
+ }
+
+ public void setYear(String year) {
+ this.year = year;
+ }
+
+ public String getImdb_rating() {
+ return imdb_rating;
+ }
+
+ public void setImdb_rating(String imdb_rating) {
+ this.imdb_rating = imdb_rating;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public String getActors() {
+ return actors;
+ }
+
+ public void setActors(String actors) {
+ this.actors = actors;
+ }
+
+ public String getAwards() {
+ return awards;
+ }
+
+ public void setAwards(String awards) {
+ this.awards = awards;
+ }
+
+ public String getDirector() {
+ return director;
+ }
+
+ public void setDirector(String director) {
+ this.director = director;
+ }
+
+ public String getImdb_id() {
+ return imdb_id;
+ }
+
+ public void setImdb_id(String imdb_id) {
+ this.imdb_id = imdb_id;
+ }
+
+ public String getImdb_votes() {
+ return imdb_votes;
+ }
+
+ public void setImdb_votes(String imdb_votes) {
+ this.imdb_votes = imdb_votes;
+ }
+
+ public String getMetascore() {
+ return metascore;
+ }
+
+ public void setMetascore(String metascore) {
+ this.metascore = metascore;
+ }
+
+ public String getPlot() {
+ return plot;
+ }
+
+ public void setPlot(String plot) {
+ this.plot = plot;
+ }
+
+ public String getRated() {
+ return rated;
+ }
+
+ public void setRated(String rated) {
+ this.rated = rated;
+ }
+
+ public String getReleased() {
+ return released;
+ }
+
+ public void setReleased(String released) {
+ this.released = released;
+ }
+
+ public String getRuntime() {
+ return runtime;
+ }
+
+ public void setRuntime(String runtime) {
+ this.runtime = runtime;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getWriter() {
+ return writer;
+ }
+
+ public void setWriter(String writer) {
+ this.writer = writer;
+ }
+}
diff --git a/src/main/java/movie/apis/MovieService.java b/src/main/java/movie/apis/MovieService.java
index 3f053f5..0cc60d1 100644
--- a/src/main/java/movie/apis/MovieService.java
+++ b/src/main/java/movie/apis/MovieService.java
@@ -106,7 +106,29 @@ public class MovieService {
// TODO: Write your code here
// All parsing code must be inside try-catch
try {
- // Your code here
+ String jsonResponse = getMoviesByGenreList(genreId, page);
+
+ if (jsonResponse == null) {
+ System.out.println("Failed to get movies for genre ID: " + genreId);
+ return;
+ }
+
+ JsonObject rootObject = JsonParser.parseString(jsonResponse).getAsJsonObject();
+ JsonArray moviesArray = rootObject.getAsJsonArray("movies");
+ int total = rootObject.get("total").getAsInt();
+ int totalPages = rootObject.get("total_pages").getAsInt();
+
+ System.out.println("\nMovies (Page " + page + " of " + totalPages + ", Total: " + total + "):");
+ System.out.println("---------------------------------------");
+
+ for (JsonElement element : moviesArray) {
+ JsonObject movieObject = element.getAsJsonObject();
+ Long id = movieObject.get("id").getAsLong();
+ String title = movieObject.get("title").getAsString();
+ String year = movieObject.has("year") ? movieObject.get("year").getAsString() : "N/A";
+ System.out.println("ID: " + id + " | " + title + " (" + year + ")");
+ }
+ System.out.println();
} catch (Exception e) {
System.err.println("ERROR: " + e.getMessage());
@@ -120,13 +142,10 @@ public class MovieService {
*/
private String getMovieById(Long movieId) {
try {
- // TODO: Complete this method
- // String url = MOVIE_BY_ID_URL + movieId;
- // HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();
- // HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
- // if (response.statusCode() == 200) return response.body();
-
- return null;
+ String url = MOVIE_BY_ID_URL + movieId;
+ HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).build();
+ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
+ if (response.statusCode() == 200) return response.body();
} catch (Exception e) {
System.out.println("!!Exception : " + e.getMessage());
}
@@ -181,10 +200,24 @@ public class MovieService {
return;
}
try {
- // TODO: Parse jsonResponse to JsonObject
- // HINT: Use JsonParser.parseString(jsonResponse).getAsJsonObject()
- // TODO: use Gson to parse the json
- // Your code here:
+ Gson gson = new Gson();
+ Movie movie = gson.fromJson(jsonResponse, Movie.class);
+
+ String header = movie.getTitle().toUpperCase() + " (" + movie.getYear() + ")";
+ String genres = (movie.getGenres() != null) ? String.join(", ", movie.getGenres()) : "N/A";
+
+ System.out.println(" =======================================================================");
+ System.out.println(" " + header);
+ System.out.println(" =======================================================================");
+ System.out.println(" Rating: " + movie.getImdb_rating() + "/10 | Votes: " + movie.getImdb_votes());
+ System.out.println(" Director: " + movie.getDirector());
+ System.out.println(" Cast: " + movie.getActors());
+ System.out.println(" Genre: " + genres);
+ System.out.println(" Runtime: " + movie.getRuntime() + " | Rated: " + movie.getRated());
+ System.out.println(" Country: " + movie.getCountry() + " | Released: " + movie.getReleased());
+ System.out.println(" Plot: " + movie.getPlot());
+ System.out.println(" Awards: " + movie.getAwards());
+ System.out.println(" =======================================================================");
} catch (Exception e) {
System.err.println("ERROR parsing movie details: " + e.getMessage());
}