import chn.util.*; import apcslib.*; public class Collection { private Movie[] movieList; private double ratingTotal = 0; private int minutes = 0; public Collection(String fileName) { loadData(fileName); } private void loadData(String fileName) { String movieTitle; String bondName; int yearReleased; double movieRating; int lengthHours; int lengthMinutes; FileInput inFile = new FileInput(fileName); int numReleases = inFile.readInt(); movieList = new Movie[numReleases]; for (int i = 0; i < numReleases; i++) { movieTitle = inFile.readLine(); bondName = inFile.readLine(); yearReleased = inFile.readInt(); movieRating = inFile.readDouble(); lengthHours = inFile.readInt(); lengthMinutes = inFile.readInt(); ratingTotal += movieRating; minutes += lengthHours * 60 + lengthMinutes; movieList[i] = new Movie(movieTitle, bondName, yearReleased, movieRating, lengthHours, lengthMinutes); } } public void displayInfo() { System.out.print(Format.center("Film Title",34)); System.out.print(Format.center("Bond Actor",16)); System.out.print(Format.center("Year",6)); System.out.print(Format.center("Rating",7)); System.out.print(Format.right("Film Length",16)); System.out.println(); System.out.println(); for (int i = movieList.length - 1; i >= 0 ; i--) { String output = movieList[i].toString(); System.out.println(output); } } public void Sort() { quickSort(movieList,0,movieList.length - 1); } private void quickSort(Movie[] list, int first, int last) { int g = first; int h = last; int midIndex; Movie dividingValue; midIndex = (first + last) / 2; dividingValue = list[midIndex]; do { while (list[g].compareTo(dividingValue) < 0) { g++; } while (list[h].compareTo(dividingValue) > 0) { h--; } if (g <= h) { // swap g and h Movie temp = list[g]; list[g] = list[h]; list[h] = temp; g++; h--; } } while (g < h); if (h > first) { quickSort(list, first, h); } if (g < last) { quickSort(list, g, last); } } public void displayAveRating() { double rating = ratingTotal / movieList.length; System.out.print("The average rating for a James Bond Movie is "); System.out.print(rating); System.out.println(" out of a possible 4.0"); } public void displayAveMinutes() { int hrs = (int)(minutes / 60.0) / movieList.length; double min = ((double)minutes / movieList.length) % 60.0; System.out.print("The average length for a James Bond Movie is "); System.out.println(hrs + " hrs and " + min + " minutes"); } public static void main(String[] args) { Collection seriesData = new Collection("bond.txt"); seriesData.Sort(); seriesData.displayInfo(); seriesData.displayAveRating(); seriesData.displayAveMinutes(); } }