图书馆仿真的第二次重构--只包含一层逻辑的for循环的方法与只有启动作用的main方法
本次重构的目的,就是想要尝试一下自己总结出来的代码结构。很多新手,像我,总会在main方法中大量调用方法,使得main方法特别臃肿,这样的代码太难看了,我觉得,main方法的作用应该只是我们的程序的入口,就是它只是一个启动的作用,最好就是只有一个调用的方法,然后这个方法再调用其他方法,这样层层调用下去,条理性会更高点,然后我们也可以知道每个方法间的逻辑联系是怎样,最主要的作用就是,通过这样的处理,我们就可以找出我们代码中的逻辑冗余(一些功能相似但是外观不一样的方法体),以及一些不必要的临时变量和参数列表,我们的方法列表也能变得更加简洁。还有一个原则,就是我认为一个方法中最好只是一个逻辑意义上的for循环(这里的逻辑意义指的是我们这个循环所做的事情,比如说我以前总是喜欢在一个方法里开头写个遍历循环,然后再写个输出循环,这是两件不同的事情,就是两种逻辑,但是如果是循环的嵌套,那就没办法了),不要总是在一个方法中写有一大堆for循环,这样方法体非常臃肿,很难看,最好就是不要包含switch-case和while循环(如果实在是有必要和没办法的话),尤其是switch-case,是造成我们代码难看的刽子手。
这些都是我自己的个人总结,如果有任何想法可以和我讨论。
代码如:
public class Library { public static void main(String[] args) throws InterruptedException, IOException { checkBookAndGetTimeOfCheck(); } @SuppressWarnings("deprecation") private static void checkBookAndGetTimeOfCheck() throws IOException { String name = enterName(); Thread t = new Thread(new Call()); t.start(); long startTime = System.currentTimeMillis(); getBookFromLibrary(name); t.stop(); long endTime = System.currentTimeMillis(); System.out.println("检索所需时间为:" + "\n" + (endTime - startTime));
} private static String enterName() throws IOException { BufferedReader name = new BufferedReader(new InputStreamReader( System.in)); String entername = name.readLine().toLowerCase(); return entername; } private static void getBookFromLibrary(String name) throws IOException { List<RatingBook> list = checkNameAndShowBookInZhongZhuanTai(name); List<RatingBook> mBookList = getBookListInLibrary(name); for (int i = 0; i < mBookList.size(); i++) { for (int j = 0; j < list.size(); j++) { if ((mBookList.get(i).getBook()) .equals((list.get(j).getBook()))) { mBookList.get(i).setRating(list.get(j).getRating()); } } } showList("图书馆里的图书列表:", mBookList); } private static List<RatingBook> checkNameAndShowBookInZhongZhuanTai( String name) throws IOException { List<RatingBook> list = addBookToList(6); List<RatingBook> containsBook = new ArrayList<RatingBook>(); List<RatingBook> deleteBook = new ArrayList<RatingBook>(); System.out.println("中转台图书列表:"); for (int i = 0; i < list.size(); i++) { String book = list.get(i).getBook().toLowerCase(); System.out.println(list.get(i).getBook() + " 评分:" + list.get(i).getRating()); if (book.contains(name)) { containsBook.add(list.get(i)); } else { deleteBook.add(list.get(i)); } } showList("中转台符合条件的图书:", containsBook); showList("要删除的图书:", deleteBook); return containsBook; } private static List<RatingBook> addBookToList(int rating) { List<RatingBook> list = new ArrayList<RatingBook>(); for (int i = 0; i < returnIndex(10); i++) { RatingBook book = new RatingBook(); bookLibrary bookArray = new bookLibrary(); book.setBook(bookArray.bookArray[returnIndex(10)]); book.setRating(returnIndex(rating)); list.add(book); } return list; } private static int returnIndex(int i) { return new Random().nextInt(i); } private static void showList(String string, List<RatingBook> list) { sortBook(list); System.out.println(string); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i).getBook() + " 评分:" + list.get(i).getRating()); } } private static List<RatingBook> sortBook(List<RatingBook> list) { // 移除同名书 for (int i = 0; i < list.size() - 1; i++) { for (int j = i + 1; j < list.size(); j++) { if ((list.get(i).getBook()).equals(list.get(j).getBook())) { list.remove(j); } } } sortBookByRating(list); return list; } private static void sortBookByRating(List<RatingBook> list) { for (int i = 0; i < list.size() - 1; i++) { for (int j = i + 1; j < list.size(); j++) { if ((list.get(i).getRating()) <= (list.get(j).getRating())) { String temp = list.get(i).getBook(); int rating = list.get(i).getRating(); list.get(i).setBook(list.get(j).getBook()); list.get(i).setRating(list.get(j).getRating()); list.get(j).setBook(temp); list.get(j).setRating(rating); } } } } private static List<RatingBook> getBookListInLibrary(String name) { List<RatingBook> bookList = addBookToList(1); List<RatingBook> mBookList = new ArrayList<RatingBook>(); for (int i = 0; i < bookList.size(); i++) { if ((bookList.get(i).getBook()).contains(name)) { mBookList.add(bookList.get(i)); } } return mBookList; } }
结果如:
中转台图书列表:
java and javascript 评分:4
Java 评分:2
中转台符合条件的图书:
java and javascript 评分:4
要删除的图书:
Java 评分:2
图书馆里的图书列表:
java and javascript 评分:4
检索所需时间为:
3