本帖最后由 王虎 于 2012-10-13 19:25 编辑
下面是老师留的一个练习题目,自己在写代码时有几个地儿就是想不通,写不出来,我想这也是很多人遇到的问题,最后还是由老师把代码写了一遍。。。写完后发现有几个关键地儿原来是那么回事,为什么自己在写时就想不到?什么时候该用什么方法,怎么写能更有效?是个值得思考的问题,真正开发中难道要靠写一手垃圾代码来维持生存?!!差距还很多,不过相信只要自己努力,没有什么不可能,加油!!
/*
List练习
有一个类 Book类 属性 bookName bookAuthor bookPrice
定义一个List集合,装入五本书.
从键盘输入一个书名,如果有这本书,将这本书的信息输出。
使用面向对象
*/
import java.util.*;
class Test5
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
Book b1=new Book("红高粱","莫言",14);
Book b2=new Book("碧血剑","金庸",84);
Book b3=new Book("小李飞刀","古龙",64);
Book b4=new Book("楚留香","古龙",32);
Book b5=new Book("Thinking in java","tom",100);
List list=new ArrayList();
list.add(b1);
list.add(b2);
list.add(b3);
list.add(b4);
list.add(b5);
System.out.println("请输入要查找的书名:");
String name=sc.nextLine();
//定义一个要查找的书籍
Book findBook=new Book(name);
Book book=BookTools.findBookByName(findBook,list);
if(book==null){
System.out.println("查无此书");
}else{
System.out.println(book);
}
}
}
class BookTools
{
//根据书名去查找书籍
public static Book findBookByName(Book findBook,List list){
Book book=null;
if(list.contains(findBook)){ //判断是否包含这本书
int index=list.indexOf(findBook);//得到第一次出现的索引
book=(Book)list.get(index);//根据索引得到这本书
}
/*
上面使用的contains与indexOf方法在内部都默认使用了 Book类的equals方法.
*/
return book;
}
}
//首先定义书类
class Book
{
private String bookName;
private String bookAuthor;
private double bookPrice;
public Book(String bookName,String bookAuthor,double bookPrice){
this.bookName=bookName;
this.bookAuthor=bookAuthor;
this.bookPrice=bookPrice;
}
public Book(String bookName){
this.bookName=bookName;
}
public String getBookName(){
return bookName;
}
public String toString(){
StringBuilder builder=new StringBuilder();
builder.append("书名:").append(bookName).append(" 作者:").append(bookAuthor).append(" 价格:").append(bookPrice);
return builder.toString();
}
/*
这个equals方法重写时只重写了bookName属性,
是因为在查找书籍时使用书名查找 .
*/
public boolean equals(Object obj){
if(obj instanceof Book){ //instanceOf 是判断obj指向的对象的类型是否是 Book
Book b=(Book)obj;
return b.bookName.equals(bookName);
}
return false;
}
} |