/* * Intro to Programming CSE 1310 * University of Texas at Arlington */ package code13novf18; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; /** * * @author jcmtiernan */ public class Code13NovF18 { /** * @param args the command line arguments */ public static void main(String[] args) { /* Code from Lab3Part1d */ boolean dataValid = true; File inBMTClean = new File("src/code13novf18/SciFiDataBMTClean.txt"); Scanner inClean = new Scanner(System.in); try { inClean = new Scanner(inBMTClean); } catch (FileNotFoundException fnfe) { System.out.println("Input data file not found."); dataValid = false; } String title = "", series = ""; char cType; int sNum; String media; int bkYear, mvYear, tvYear; char bkCov; double bkPr; boolean headerToPrint = true; int numBMT = 100; String[] titles = new String[numBMT]; String[] sNames = new String[numBMT]; int[] sNums = new int[numBMT]; double[] bkPrices = new double[numBMT]; int[][] yearsBMT = new int[numBMT][3]; int bk = 0, mv = 1, tv = 2; tableHeader(); /* System.out.printf("%30s%12s","", "SciFi or"); System.out.printf("%6s%6s%5s","Book","Cover","Book"); System.out.printf("%6s%6s\n","Movie","TV"); System.out.printf("%-30s%12s","Title", "Fantasy"); System.out.printf("%6s%5s%6s","Year","Type","Price"); System.out.printf("%6s%6s ","Year","Year"); System.out.printf("%-40s\n","Series Name"); */ int countBMT = 0; String endOfLine = " "; Scanner lineBMT = new Scanner(System.in); while(inClean.hasNextLine()) { cType = ' '; title = ""; sNum = 0; series = ""; media = ""; dataValid = true; cType = inClean.next().charAt(0); inClean.useDelimiter("-*[0-9]"); //title = inClean.next(); titles[countBMT] = inClean.next(); titles[countBMT] = removeBlanks(titles[countBMT]); inClean.reset(); //if (inClean.hasNextInt()) //sNum = inClean.nextInt(); sNums[countBMT] = inClean.nextInt(); inClean.useDelimiter(":"); //series = inClean.next(); sNames[countBMT] = inClean.next(); sNames[countBMT] = removeBlanks(sNames[countBMT]); inClean.reset(); // System.out.println("DEBUG: CType = "+cType+" Title = "+titles[countBMT]+ // " SNum = "+sNums[countBMT]+" Series = "+sNames[countBMT]); inClean.next(); // get rid of the colon endOfLine = inClean.nextLine(); //System.out.println("DEBUG: end of Line is "+endOfLine); lineBMT = new Scanner(endOfLine); media = ""; media = lineBMT.next(); // word after colon bkYear = 0; yearsBMT[countBMT][bk] = 0; bkCov = ' '; bkPr = -1; bkPrices[countBMT] = -1; if (media.equals("Book")) { yearsBMT[countBMT][bk] = lineBMT.nextInt(); bkCov = lineBMT.next().charAt(0); //bkPr = inClean.nextDouble(); bkPrices[countBMT] = lineBMT.nextDouble(); /* System.out.print("DEBUG: yearsBMT["+countBMT+"]["+bk+"] = "+yearsBMT[countBMT][bk]); System.out.print(" bkCov = "+bkCov); System.out.print(" bkPrices[countBMT] = "+bkPrices[countBMT] ); */ if (lineBMT.hasNext()) media = lineBMT.next(); //System.out.println(" media is "+media); } else { //System.out.println(""); } mvYear = 0; yearsBMT[countBMT][mv] = 0; if (media.equals("Movie")) { yearsBMT[countBMT][mv] = lineBMT.nextInt(); // System.out.printf("DEBUG: yearsBMT["+countBMT+"]["+mv+"] = "+yearsBMT[countBMT][mv] ); if (lineBMT.hasNext()) { media = lineBMT.next(); //System.out.println(" media is "+media); } else { //System.out.println(""); } } tvYear = 0; yearsBMT[countBMT][tv] = 0; if (media.equals("TV")) { yearsBMT[countBMT][tv] = lineBMT.nextInt(); } //if (inClean.hasNextLine()) //media = inClean.nextLine(); /* System.out.printf("%-40s%-3c",titles[countBMT], cType); System.out.printf("%6d%3c%7.2f",yearsBMT[countBMT][bk],bkCov,bkPrices[countBMT]); System.out.printf("%6d%6d ",yearsBMT[countBMT][mv],yearsBMT[countBMT][tv]); System.out.printf("%-45s\n",sNames[countBMT]); countBMT++; */ if (headerToPrint) { tableHeader(); headerToPrint = false; } System.out.printf("%-40s%-3c",titles[countBMT], cType); if (yearsBMT[countBMT][bk] != 0) System.out.printf("%6d%3c%7.2f",yearsBMT[countBMT][bk],bkCov,bkPrices[countBMT]); else System.out.printf("%16s",""); System.out.printf("%6s%6s ", (yearsBMT[countBMT][mv] != 0? yearsBMT[countBMT][mv]: " "), (yearsBMT[countBMT][tv] != 0? yearsBMT[countBMT][tv]: " ")); System.out.printf("%-45s\n",sNames[countBMT]); countBMT++; //System.out.println("--- countBMT "+countBMT); } //arrayDataHeader(); //printArrayData(countBMT, titles, bkPrices, sNums, sNames); tableHeaderWYears(); printArrayDataWYears(countBMT, titles, bkPrices, sNums, sNames, yearsBMT); // @@@ searching data - linear search //search the prices array for 8.99 int indexFound = -1; for (int curr = 0; curr < bkPrices.length; curr++) { if (bkPrices[curr] == 8.99) { indexFound = curr; System.out.println("\nWhoo-hoo! We found it for title "+ titles[curr] +" at index "+indexFound); } } if (indexFound == -1) { System.out.println("\nValue was not found in array"); } System.out.println("\nBefore title sort"); for (int pass = 0; pass < countBMT-1; pass++) { System.out.println("title["+pass+"] is "+ titles[pass]); } bubbleSortTitles(titles, bkPrices, sNums, sNames, yearsBMT,countBMT); System.out.println("\nAfter title sort"); for (int pass = 0; pass < countBMT-1; pass++) { System.out.println("title["+pass+"] is "+ titles[pass]); } tableHeaderWYears(); printArrayDataWYears(countBMT, titles, bkPrices, sNums, sNames, yearsBMT); // @@@ sorting data - bubble sort System.out.println("\nBefore sort"); for (int pass = 0; pass < countBMT-1; pass++) // (bkPrices.length-1) { System.out.println("bkPrice["+pass+"] is "+ bkPrices[pass]); } // Example - bubble sort the prices array bubbleSortPrices(bkPrices); //bubbleSortPricesComment(countBMT, bkPrices); System.out.println("\nAfter sort"); for (int pass = 0; pass < (bkPrices.length-1); pass++) { System.out.println("bkPrice["+pass+"] is "+ bkPrices[pass]); } System.out.println(""); for (int k = 0; k < yearsBMT.length; k++) System.out.printf("%5s%4d%7s%4d%4s%7d\n","Book ",yearsBMT[k][0] , " Movie ",yearsBMT[k][1] ," TV ",yearsBMT[k][2]); bubbleSortBookYear(yearsBMT); System.out.println(""); for (int k = 0; k < yearsBMT.length; k++) System.out.printf("%5s%4d%7s%4d%4s%7d\n","Book ",yearsBMT[k][0] , " Movie ",yearsBMT[k][1] ," TV ",yearsBMT[k][2]); } // Method to remove extra blanks and tabs from beginning and end of a string public static String removeBlanks(String inStr) { int inStrLen = inStr.length(); //System.out.println("initial inStr is *"+inStr+"*"); int i = 0; while ((inStr.charAt(i) == ' ') || (inStr.charAt(i) == '\t')) { inStr = inStr.substring(1); // remove one blank at front i=0; // make counter start at 0 again inStrLen = inStr.length(); // get length of new string } //System.out.println("middle inStr is *"+inStr+"*"); inStrLen = inStr.length(); i = (inStrLen - 1); while ((inStr.charAt(i) == ' ') || (inStr.charAt(i) == '\t')) { inStr = inStr.substring(0,i); // remove blanks at end i--; } //System.out.println("final inStr is *"+inStr+"*"); return inStr; } public static void tableHeader() { System.out.printf("%30s%12s","", "SciFi or"); System.out.printf("%6s%6s%5s","Book","Cover","Book"); System.out.printf("%6s%6s\n","Movie","TV"); System.out.printf("%-30s%12s","Title", "Fantasy"); System.out.printf("%6s%5s%6s","Year","Type","Price"); System.out.printf("%6s%6s ","Year","Year"); System.out.printf("%-40s\n","Series Name"); } public static void arrayDataHeader() { System.out.println("\n"); System.out.println("Array Data:"); System.out.printf("%30s %12s%6s\n","", "Series","Book"); System.out.printf("%-30s %12s%6s ","Title", "Number","Price" ); System.out.printf("%-40s\n","Series Name"); } public static void printArrayLine(String title, double bkPrice, int sNum, String sName) { { if (!title.equals("")) { System.out.printf("%-40s%-3d ",title, sNum); if (bkPrice != -1) System.out.printf("%7.2f ",bkPrice); else System.out.printf("%7s "," "); System.out.printf("%-45s\n",sName); } } } public static void printArrayData(int countBMT, String[] titles, double[] bkPrices, int[] sNums, String[] sNames) { for (int c=0; c < countBMT; c++) { System.out.printf((c > 9 ?"[%2d] : ":" [%1d] : "),c); printArrayLine(titles[c], bkPrices[c], sNums[c], sNames[c]); } } public static void printArrayDataWYears(int countBMT, String[] titles, double[] bkPrices, int[] sNums, String[] sNames, int[][] yearsBMT) { for (int c=0; c < countBMT; c++) { System.out.printf((c > 9 ?"[%2d] : ":" [%1d] : "),c); printArrayLineWYears(titles[c], bkPrices[c], sNums[c], sNames[c], yearsBMT[c] ); } } public static void tableHeaderWYears() { System.out.printf("\n%40s%12s","", "Series"); System.out.printf("%6s%5s","Book","Book"); System.out.printf("%6s%6s\n","Movie","TV"); System.out.printf("%-40s%12s","Title", "Number"); System.out.printf("%6s%6s","Year","Price"); System.out.printf("%6s%6s ","Year","Year"); System.out.printf("%-40s\n","Series Name"); } public static void printArrayLineWYears(String title, double bkPrice, int sNum, String sName, int[] yearsBMT) { int bk = 0, mv = 1, tv = 2; { if (!title.equals("")) { System.out.printf("%-40s%-3d ",title, sNum); if (bkPrice != -1) System.out.printf("%6d%7.2f ",yearsBMT[bk],bkPrice); else System.out.printf("%13s "," "); System.out.printf("%6s%6s ", (yearsBMT[mv] != 0? yearsBMT[mv]: " "), (yearsBMT[tv] != 0? yearsBMT[tv]: " ")); System.out.printf("%-45s\n",sName); //System.out.printf("%-40s%-3d%-3c",titles[countBMT], sNum, cType); // need to save cType in array to make work //if (yearsBMT[countBMT][bk] != 0) //System.out.printf("%6d%3c%7.2f",yearsBMT[countBMT][bk],bkCov,bkPrices[countBMT]); //else //System.out.printf("%16s",""); //System.out.printf("%6s%6s ", //(yearsBMT[countBMT][mv] != 0? yearsBMT[countBMT][mv]: " "), //(yearsBMT[countBMT][tv] != 0? yearsBMT[countBMT][tv]: " ")); //System.out.printf("%-45s\n",sNames[countBMT]); } } } public static void bubbleSortBookYear(int[][] yearsBMT) { for (int i = 0; i < yearsBMT.length; i++) { for (int j = 0; j < (yearsBMT.length - 1); j++) { if (yearsBMT[j][0] < yearsBMT[j+1][0]) { // swapping rows in the 2D array int[] tempArray = yearsBMT[j]; yearsBMT[j] = yearsBMT[j+1]; yearsBMT[j+1] = tempArray; } } } } public static void bubbleSortPrices(double[] bkPrices) { double pr = -1; for (int i = 0; i < (bkPrices.length-1); i++) for (int pass = 0; pass < (bkPrices.length-1); pass++) if (bkPrices[pass] < bkPrices[pass+1]) { // swap pr = bkPrices[pass]; bkPrices[pass] = bkPrices[pass+1]; bkPrices[pass+1] = pr; } } public static void bubbleSortPricesComment(int countBMT, double[] bkPrices) { double pr = -1; for (int i = 0; i < countBMT-1; i++) // (bkPrices.length-1) { System.out.printf("%8s%3d\n","Outer",i); for (int pass = 0; pass < (bkPrices.length-1); pass++) { System.out.printf("%8s%3d","Inner",pass); if (bkPrices[pass] < bkPrices[pass+1]) { // swap System.out.println("Swap ["+pass+ "] "+bkPrices[pass]+" and ["+ (pass+1)+"] "+bkPrices[pass+1]); pr = bkPrices[pass]; bkPrices[pass] = bkPrices[pass+1]; bkPrices[pass+1] = pr; } } } } public static void bubbleSortTitles(String[] titles, double[] bkPrices, int[] sNums, String[] sNames, int[][] yearsBMT,int countBMT) { String pr = ""; for (int i = 0; i < countBMT-1; i++) for (int pass = 0; pass < countBMT-1; pass++) { if (titles[pass].compareTo(titles[pass+1]) > 0) { // swap //pr = titles[pass]; //titles[pass] = titles[pass+1]; //titles[pass+1] = pr; swapAllAdjacent(pass, titles, bkPrices, sNums, sNames, yearsBMT) ; } } } public static void swapAllAdjacent(int index, String[] titles, double[] bkPrices, int[] sNums, String[] sNames, int[][] yearsBMT) { // swapping elements index with index+1 String tempTitle, tempSName; int tempSNum; double tempPrice; int[] tempYears = new int[3]; tempTitle = titles[index]; titles[index] = titles[index+1]; titles[index+1] = tempTitle; tempPrice = bkPrices[index]; bkPrices[index] = bkPrices[index+1]; bkPrices[index+1] = tempPrice; tempYears = yearsBMT[index]; yearsBMT[index] = yearsBMT[index+1]; yearsBMT[index+1] = tempYears; tempSName = sNames[index]; sNames[index] = sNames[index+1]; sNames[index+1] = tempSName; tempSNum = sNums[index]; sNums[index] = sNums[index+1]; sNums[index+1] = tempSNum; } }