Results 1 to 3 of 3
  1. #1
    renars1985 is offline Member
    Join Date
    Nov 2007
    Posts
    9
    Rep Power
    0

    Question continuation of Java I/O

    Thanks to hardwired about this code but I forgot ask one more thing:
    it is necessary to order entered books by year, author or name.

    import java.io.*;

    public class Gramata2 {
    public static void main (String[] args) {
    File file = new File("gramata2.txt");
    BufferedReader reader = new BufferedReader(
    new InputStreamReader(System.in));
    try {
    System.out.println("Enter a book, see book list " +
    "or quit? 'e'/'s'/'q'");
    String choice = reader.readLine();
    while(!choice.equalsIgnoreCase("q")) {
    if(choice.equals("e")) {
    System.out.print("Enter name of the book: ");
    String book = reader.readLine();
    System.out.println("enter author");
    String author = reader.readLine();
    System.out.println("enter year");
    String year = reader.readLine();
    PrintWriter out = new PrintWriter(
    new FileWriter(file, true));
    out.println(year + " " + book + " by " + author);
    out.close();
    } else if(choice.equals("s")) {
    BufferedReader in = new BufferedReader(
    new FileReader(file));
    String line;
    while((line = in.readLine()) != null) {
    System.out.println(line);
    }
    in.close();
    }
    System.out.println("Enter a book see, book list " +
    "or quit? 'e'/'s'/'q'");
    choice = reader.readLine();
    }
    reader.close();
    } catch(IOException e) {
    System.out.println("I/O error: " + e.getMessage());
    }
    }
    }

  2. #2
    hardwired's Avatar
    hardwired is offline Senior Member
    Join Date
    Jul 2007
    Posts
    1,576
    Rep Power
    9

    Default

    Java Code:
    import java.io.*;
    import java.util.*;
    
    public class Gramata3 {
        public static void main(String[] args) {
            String[][] books = {
                  //   book                        author              year
                { "Head First Java",          "Bates and Sierra",     "2003" },
                { "Thinking In Java",         "Bruce Eckel",          "2002" },
                { "Learning Java",            "Niemeyer and Knudsen", "2000" },
                { "Developing Java Sortware", "Winder and Roberts",   "2000" }
            };
            File file = new File("gramata3.txt");
            try {
                PrintWriter out = new PrintWriter(
                                  new FileWriter(file));
                for(int j = 0; j < books.length; j++) {
                    out.println(books[j][2] + " " + books[j][0] + " by " + books[j][1]);
                }
                out.close();
            } catch(IOException e) {
                System.out.println("write error: " + e.getMessage());
            }
           
            BufferedReader reader = new BufferedReader(
                                    new InputStreamReader(System.in));
            try {
                System.out.println("Enter a book, see book list " +
                                   "or quit? 'e'/'s'/'q'");
                String choice = reader.readLine();
                while(!choice.equalsIgnoreCase("q")) {
                    if(choice.equals("e")) {
                        System.out.print("Enter name of the book: ");
                        String book = reader.readLine();
                        System.out.println("enter author");
                        String author = reader.readLine();
                        System.out.println("enter year");
                        String year = reader.readLine();
                        PrintWriter out = new PrintWriter(
                                          new FileWriter(file, true));
                        out.println(year + " " + book + " by " + author);
                        out.close();
                    } else if(choice.equals("s")) {
                        System.out.println("sort books by title, author " +
                                           "or date? 't'/'a'/'d'");
                        choice = reader.readLine().toLowerCase();
                        int index = choice.equals("t") ? 1 :
                                    choice.equals("a") ? 2 : 0;
                        showBooks(file, index);
                    }
                    System.out.println("Enter a book see, book list " +
                                       "or quit? 'e'/'s'/'q'");
                    choice = reader.readLine();
                }
                reader.close();
            } catch(IOException e) {
                System.out.println("main I/O error: " + e.getMessage());
            }
        }
    
        private static void showBooks(File file, int index) {
            List<String> list = new ArrayList<String>();
            try {
                BufferedReader in = new BufferedReader(
                                    new FileReader(file));
                String line;
                while((line = in.readLine()) != null) {
                    list.add(line);
                }
                in.close();
            } catch(IOException e) {
                System.out.println("showBooks I/O error: " + e.getMessage());
            }
            sort(list, index);
        }
    
        private static void sort(List<String> list, int index) {
            // Parse the lines into the title, author and date data.
            String[][] data = new String[list.size()][];
            for(int j = 0; j < list.size(); j++) {
                String book = (String)list.get(j);
                data[j] = getBookData(book);
            }
            // Sort the books.
            for(int j = 0; j < data.length; j++) {
                String min = data[j][index];
                int minIndex = j;
                for(int k = j+1; k < data.length; k++) {
                    int compare = 0;
                    switch(index) {
                        case 0:  // year
                            Integer n = Integer.valueOf(min);
                            compare = Integer.valueOf(data[k][index]).compareTo(n);
                            break;
                        case 1:  // title
                            String s = String.valueOf(min);
                            compare = data[k][index].compareTo(s);
                            break;
                        case 2:  // author
                            String name = getComparableName(data[k][index]);
                            s = getComparableName(min);
                            compare = name.compareTo(s);
                    }
                    if(compare < 0) {
                        min = data[k][index];
                        minIndex = k;
                    }
                }
                if(minIndex != j) {
                    // Found lower sort value, swap book elements.
                    String[] temp = data[j];
                    data[j] = data[minIndex];
                    data[minIndex] = temp;
                }
            }
            // Print the sorted array.
            for(int j = 0; j < data.length; j++) {
                String year = data[j][0];
                String title = data[j][1];
                String author = data[j][2];
                System.out.println(year + " " + title + " by " + author);
            }
            System.out.println("------------------");
        }
    
        private static String[] getBookData(String book) {
            String[] data = new String[3];
            int start = book.indexOf(" ");
            data[0] = book.substring(0, start);   // year
            int by = book.indexOf(" by ", start+1);
            data[1] = book.substring(start, by);  // title
            data[2] = book.substring(by + 4);     // author
            return data;
        }
    
        private static String getComparableName(String s) {
            boolean hasAnd = s.indexOf(" and ") != -1;
            int last = s.lastIndexOf(" ");
            if(!hasAnd && last != -1) {
                // Put last name first for accurate sorting.
                s = s.substring(last+1) + " " + s.substring(0, last);
            }
            return s;
        }
    }

  3. #3
    renars1985 is offline Member
    Join Date
    Nov 2007
    Posts
    9
    Rep Power
    0

    Default

    Thank you again hardwired!
    Seems that adding order feature was very complicated.
    However file "resets" (lost my entered info) afer debug or run. I don`t want to lose info. :)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •