diff --git a/src/main/java/Rational/Rational.java b/src/main/java/Rational/Rational.java index 7bd840e..dc4dcf4 100644 --- a/src/main/java/Rational/Rational.java +++ b/src/main/java/Rational/Rational.java @@ -55,26 +55,42 @@ public class Rational { // 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)-((this.denominator)*other.numerator) ; + int NewDenominator = (this.denominator)*other.denominator; + + return new Rational(NewNumerator ,NewDenominator); + + + // Remove this line when implemented } // TODO: Static method - r1 - r2 public static Rational subtract(Rational r1, Rational r2) { // YOUR CODE HERE - return null; // Remove this line when implemented + int NewNumerator = (r1.numerator* r2.denominator)-(r1.denominator* r2.numerator) ; + int NewDenominator = r1.denominator* r2.denominator ; + + return new Rational(NewNumerator ,NewDenominator); } // 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) { + int NewNumerator = r1.numerator* r2.numerator ; + int NewDenominator = r1.denominator* r2.denominator ; + + return new Rational(NewNumerator ,NewDenominator); // YOUR CODE HERE - return null; // Remove this line when implemented + //return null; // Remove this line when implemented } // TODO: Instance method - this / other @@ -83,13 +99,32 @@ public class Rational { // 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 + // return null; // Remove this line when implemented + if (other.numerator == 0 ) + { + throw new ArithmeticException("cannot divide ") ; + } + 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 + if (r2.numerator == 0 ) + { + throw new ArithmeticException("cannot divide ") ; + } + int NewNumerator = r1.numerator * r2.denominator ; + int NewDenominator = r1.denominator * r2.numerator ; + return new Rational(NewNumerator ,NewDenominator); + + + //return null; // Remove this line when implemented } // PROVIDED - String representation diff --git a/src/main/java/movie/apis/Genre.java b/src/main/java/movie/apis/Genre.java index 8560f7f..790d674 100644 --- a/src/main/java/movie/apis/Genre.java +++ b/src/main/java/movie/apis/Genre.java @@ -4,9 +4,11 @@ public class Genre { private Long id; private String name; - public Genre(Long id, String name) { + public Genre(Long id, String name ) { + this.id = id; this.name = name; + } public Genre() { @@ -28,6 +30,9 @@ public class Genre { this.name = name; } + + + @Override public String toString() { return id + ". " + name; diff --git a/src/main/java/movie/apis/Main.java b/src/main/java/movie/apis/Main.java index f0e713d..ab00b78 100644 --- a/src/main/java/movie/apis/Main.java +++ b/src/main/java/movie/apis/Main.java @@ -22,12 +22,19 @@ public class Main { 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; diff --git a/src/main/java/movie/apis/Movie.java b/src/main/java/movie/apis/Movie.java index 969774a..9ef9246 100644 --- a/src/main/java/movie/apis/Movie.java +++ b/src/main/java/movie/apis/Movie.java @@ -17,6 +17,76 @@ public class Movie { private String country; // TODO: Create a 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 ; + } + public Movie(Long id , String title) + { + this.id = id ; + this.title = title ; + } + public Movie(){} + 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 ; + } + // TODO: Create a simple constructor with id and title only diff --git a/src/main/java/movie/apis/MovieService.java b/src/main/java/movie/apis/MovieService.java index 3f053f5..5525fe7 100644 --- a/src/main/java/movie/apis/MovieService.java +++ b/src/main/java/movie/apis/MovieService.java @@ -107,7 +107,23 @@ public class MovieService { // All parsing code must be inside try-catch try { // Your code here - + String json_res = getMoviesByGenreList(genreId , page); + if (json_res == null) + { + System.out.println("no data "); + return; + } + JsonObject root = JsonParser.parseString(json_res).getAsJsonObject() ; + JsonArray movie_arr = root.getAsJsonArray("movies") ; + Gson gson = new Gson() ; + Type movieListType = new TypeToken>(){}.getType(); + List movies = gson.fromJson(movie_arr, movieListType); + long total = root.get("total").getAsLong(); + long totalPages = root.get("total_pages").getAsLong(); + System.out.println("Page " + page + " of " + totalPages + " (Total movies: " + total + ")"); + for (Movie m : movies) { + System.out.println("ID: " + m.getId() + " | " + m.getTitle() + " (" + m.getYear() + ")"); + } } catch (Exception e) { System.err.println("ERROR: " + e.getMessage()); } @@ -121,12 +137,16 @@ 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(); + 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(); + else { + throw new IOException("HTTP error code: " + response.statusCode()); + } + + - return null; } catch (Exception e) { System.out.println("!!Exception : " + e.getMessage()); } @@ -170,10 +190,12 @@ public class MovieService { */ - public void displayMovieDetails(Long movieId) { + /*public void displayMovieDetails(Long movieId) { // Step 1: Get JSON response from API String jsonResponse = getMovieById(movieId); + + // Step 2: Check if we got valid data // Step 3-5: Parse JSON and display details (PUT YOUR CODE INSIDE try-catch) if (jsonResponse == null) { @@ -181,12 +203,19 @@ 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: + + } catch (Exception e) { System.err.println("ERROR parsing movie details: " + e.getMessage()); } } + // TODO: Parse jsonResponse to JsonObject + // HINT: Use JsonParser.parseString(jsonResponse).getAsJsonObject() + // TODO: use Gson to parse the json + // Your code here: + + } catch (Exception e) { + System.err.println("ERROR parsing movie details: " + e.getMessage()); + } + }*/ } \ No newline at end of file