/* * Intro to Programming CSE 1310 * University of Texas at Arlington */ package code23octf18arraylist; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Scanner; /** * * @author jcmtiernan */ public class Code23OctF18ArrayList { /** * @param args the command line arguments */ public static void main(String[] args) { String dataFile = "BMTtitleMix.txt"; File inputData = new File (dataFile); Scanner inFile; boolean dataValid = true; /* String[] inputWords = new String[12]; String[] titles = new String[100]; int[] bookYears = new int[100]; int[] movieYears = new int[100]; int[] tvYears = new int[100]; */ String[] inputWords = new String[20]; ArrayList titles = new ArrayList(100); ArrayList bookYears = new ArrayList(100); ArrayList movieYears = new ArrayList(100); ArrayList tvYears = new ArrayList(100); /* for (int i=0; i<100; i++) { titles.add(i, ""); bookYears.add(0); movieYears.add(0); tvYears.add(0); } */ try { inFile = new Scanner(inputData); } catch (FileNotFoundException fnfe) { inFile = new Scanner(System.in); System.out.println("\nInput file \""+dataFile+"\" was not found"); } Scanner inData = new Scanner(System.in); String inString = ""; int line = 0; int bmt = 0; int books = 0; int movies = 0; int tvs = 0; String leastWord = "zzzz"; String greatestWord = "AAAA"; do { inString = inFile.nextLine(); inData = new Scanner(inString); inputWords = inString.split("\t"); // split assigns each word to an array element in inputWords books = 0; movies = 0; tvs = 0; bmt = 0; for(int i = 0; i < (inputWords.length); i++) { if (!inputWords[i].equals("")) // note that inputWords != "" does not work { System.out.println("Line "+line+": inputWords["+i+"]: "+inputWords[i]); // Finding alphabetical least and greatest if ((inputWords[i].compareTo(leastWord) < 0) && // compareTo gives <0, =0, or >0 value (inputWords[i].compareTo("9999") > 0)) { leastWord = inputWords[i]; //System.out.println("Current leastWord is : "+leastWord); } if (inputWords[i].compareTo(greatestWord) > 0) // compareTo gives <0, =0, or >0 value { greatestWord = inputWords[i]; //System.out.println("Current greatestWord is : "+greatestWord); } // capture the years // doesn't handle error in numeric data if (inputWords[i].equals("Book")) { bmt++; books++; bookYears.add(line,Integer.valueOf(inputWords[i+1])); //System.out.println("In bookYears, line is "+line+" and i is "+i+" bookYear is "+bookYears.get(line)); } if (inputWords[i].equals("Movie")) { bmt++; movies++; System.out.println("In movieYears, line is "+line+" and i is "+i); movieYears.add(line, Integer.valueOf(inputWords[i+1])); System.out.println("movieYears.get(line) is "+movieYears.get(line)); } if (inputWords[i].equals("TV")) { bmt++; tvs++; //System.out.println("In tvYears, line is "+line+" and i is "+i); tvYears.add(line,Integer.valueOf(inputWords[i+1])); } if ((bmt >= 1) && (inputWords[i].charAt(0) > '9') && !(inputWords[i].equals("Book")) && !(inputWords[i].equals("Movie")) && !(inputWords[i].equals("TV"))) { titles.add(line, inputWords[i]); System.out.println("Added title: "+titles.get(line)+" bmt = "+bmt); if ((books == 1) && (movies == 0) && (tvs == 0)) { movieYears.add(line,0); tvYears.add(line,0); } if ((books == 1) && (movies == 1) && (tvs == 0)) { tvYears.add(line,0); } if ((books == 1) && (movies == 0) && (tvs == 1)) { movieYears.add(line,0); } if ((books == 0) && (movies == 1) && (tvs == 1)) { bookYears.add(line,0); } if ((books == 0) && (movies == 1) && (tvs == 0)) { bookYears.add(line,0); tvYears.add(line,0); } if ((books == 0) && (movies == 0) && (tvs == 1)) { bookYears.add(line,0); movieYears.add(line,0); } } } } line++; } while (inFile.hasNext() && dataValid) ; inFile.close(); System.out.println("\nThe earliest alphabetical title is "+leastWord); System.out.println("The latest alphabetical title is "+greatestWord); System.out.printf("\n%34s%8s%8s%8s\n","","Book","Movie","TV"); System.out.printf("\n%34s%8s%8s%8s\n","Title","Publish","Premier","Air"); for(int k=0; k < line; k++) { //System.out.println("bookYears.get("+k+") = "+bookYears.get(k)); if ((bookYears.get(k) != 0) || (movieYears.get(k) != 0) || (tvYears.get(k) != 0)) { System.out.printf("%3d %-34s%8s%8s%8s\n",k,titles.get(k), (bookYears.get(k) == 0? "": Integer.toString(bookYears.get(k))), (movieYears.get(k) == 0? "": String.valueOf(movieYears.get(k))), (tvYears.get(k) == 0? "": (""+tvYears.get(k)))); } } System.out.println(""); System.out.println("Printing array elements as one vector"); System.out.println(titles); System.out.println(bookYears); ArrayList names = new ArrayList(titles); //names. //names = Arrays.copyOf(titles, line); System.out.println("\nPrinting copy of array as one vector"); System.out.println(names); //names. Collections.sort(names); System.out.println("\nPrinting sorted copy of array(Arrays.sort(names)) as one vector"); System.out.println(names); System.out.println("###"); printList(names); // delete an element at array location 10 System.out.println("\nDelete element at index 10: "+names.get(10)); //names[10] = ""; names.remove(10); System.out.println("***"); printList(names); // remove the blank line by moving other items /* System.out.println("\nRemove the blank line by moving other items"); for (int m=0; m < (names.length-1); m++) { if (names[m].isEmpty()) { names[m] = names[m+1]; names[m+1] = ""; } } printList(names); */ // add an element at location 22 System.out.println("\nAdd an element at location 22 - move elements to make space"); int target = 22; /* for (int m=(names.length-1); m > target; m--) { if (names[m].isEmpty()) { names[m] = names[m-1]; names[m-1] = ""; } } */ printList(names); //names[target] = "Magic Burns"; names.add(22, "Magic Burns"); System.out.println("\nAdding element \"Magic Burns\" at location 22"); printList(names); // delete an element equal to 1955 System.out.println("\nDelete an element equal to 1955"); /* int loc = -1; for (int m=0; m < (names.length-1); m++) { if (bookYears[m] == 1955) { loc = m; } } */ System.out.println("***"); printIntList(bookYears); bookYears.remove(Integer.valueOf(1955)); System.out.println("---"); printIntList(bookYears); // remove the element by moving other items /* System.out.println("\nRemove the element by moving other items"); for (int m=loc; m < (names.length-1); m++) { bookYears[m] = bookYears[m+1]; bookYears[m+1] = 0; } printList(bookYears); */ printFile(titles,bookYears,movieYears,tvYears, line); } public static void printList(String[] list) { for (int m=0; m < list.length; m++) { System.out.println(list[m]); } } public static void printList(int[] list) { for (int m=0; m < list.length; m++) { System.out.println(list[m]); } } public static void printList(ArrayList list) { for (int m=0; m < list.size(); m++) { if (!list.get(m).equals("")) { System.out.println(m+": "+list.get(m)); } } } public static void printIntList(ArrayList list) { for (int m=0; m < list.size(); m++) { if (!list.get(m).equals("")) { System.out.println(m+": "+list.get(m)); } } } public static void printFile(ArrayList titles,ArrayList bookYears, ArrayList movieYears,ArrayList tvYears, int line) { PrintWriter output = new PrintWriter(System.out); try { output = new PrintWriter("BMTout.txt"); } catch (FileNotFoundException fnfe) { System.out.println("Cannot print output to file."); } output.printf("\n%34s%8s%8s%8s\n","","Book","Movie","TV"); output.printf("\n%34s%8s%8s%8s\n","Title","Publish","Premier","Air"); for(int k=0; k < (line-1); k++) { //System.out.println("bookYears.get("+k+") = "+bookYears.get(k)); if ((bookYears.get(k) != 0) || (movieYears.get(k) != 0) || (tvYears.get(k) != 0)) { output.printf("%3d %-34s%8s%8s%8s\n",k,titles.get(k), (bookYears.get(k) == 0? "": Integer.toString(bookYears.get(k))), (movieYears.get(k) == 0? "": String.valueOf(movieYears.get(k))), (tvYears.get(k) == 0? "": (""+tvYears.get(k)))); } } output.close(); } }