2.写一个商品信息录入代码,包括编号、商品名称、进货日期、价格
格式:1,牛肉,2013-3-17,35
拆分字符串,自定义key存入HashMap<String,String>,每个商品对应一个map
输入一个商品完成后,提示是否继续输入,n结束,y继续
多个商品信息放入ArrayList<HashMap<String,String>>中
所有商品信息录入完毕,从ArrayList取出所有商品信息,每个商品转换成一个Product对象,再放入一个新的ArrayList<Product>中
按id判断是否包含指定商品
package homework; import java.util.*; /** * 商品录入程序 * 练习常用集合ArrayList和HashMap的用法。 */ public class ProductInput { public static void main(String[] args) { ProductInput pi = new ProductInput(); // 存放商品信息的list的初始化 ArrayList<HashMap<String, String>> mapList = pi.initList(); // 存放商品对象的list的初始化 ArrayList<Product> pList = pi.initProductList(mapList); // 通过id查找商品 pi.findProductById(pList); } /** * 商品录入模块,将录入的信息拆分后存入HashMap中。 * 用ArrayList保存多个HashMap,也即多个商品信息。类似二维数组的思维。 * @return 返回封装有多个商品的ArrayList对象。 */ public ArrayList<HashMap<String, String>> initList() { Scanner scan = new Scanner(System.in); ArrayList<HashMap<String, String>> mapList = new ArrayList<HashMap<String, String>>(); for (;;) { System.out.println("请输入商品信息"); System.out.println("格式:编号,商品名称,进货日期,价格"); String strMsg = scan.next(); String[] strArrPro = strMsg.split(","); // 此处用于录入控制,可以自己扩展,使程序尽可能的健壮。 if (strArrPro.length != 4) { System.out.println("格式错误!"); continue; } String strPid = strArrPro[0]; String strPname = strArrPro[1]; String strDate = strArrPro[2]; String strPrice = strArrPro[3]; // 创建HashMap,用于存放商品信息键值对。一个HashMap对应一种商品。 HashMap<String, String> map = new HashMap<String, String>(); map.put("pid", strPid); map.put("pname", strPname); map.put("date", strDate); map.put("price", strPrice); // 将封装有一个个商品信息的map存入list中 mapList.add(map); System.out.println("是否继续?Y继续/N退出"); String s = scan.next(); if ("N".equalsIgnoreCase(s)){ break; } } return mapList; } /** * 完成 ArrayList<Product>的初始化工作:将存放有map的list中的商品信息取出, * 完成一个个具体商品Product的初始化,然后用一个新ArrayList存储这些商品对象。 * @param mapList 由含有商品信息的map组成的ArrayList * @return 存储有多个商品对象的新ArrayList */ public ArrayList<Product> initProductList( ArrayList<HashMap<String, String>> mapList) { ArrayList<Product> pList = new ArrayList<Product>(); for (int i = 0; i < mapList.size(); i++) { HashMap<String, String> map = mapList.get(i); String strPid = map.get("pid"); String strPname = map.get("pname"); String strDate = map.get("date"); String strPrice = map.get("price"); String[] strArrDate = strDate.split("-"); // 字符串的日期转换为Date类型的日期 Calendar cal = Calendar.getInstance(); cal.set(Integer.parseInt(strArrDate[0]), Integer.parseInt(strArrDate[1]) - 1,// 注意此处要-1 Integer.parseInt(strArrDate[2])); Date date = cal.getTime(); // 字符串型的价格转换为double型的价格 double douPrice = Double.parseDouble(strPrice); // 将商品信息封装为商品Product对象 Product p = new Product(strPid, strPname, date, douPrice); pList.add(p); } return pList; } /** * 通过Id查找商品 * @param pList 存储有多个商品的ArrayList。 */ public void findProductById(ArrayList<Product> pList) { Scanner scan = new Scanner(System.in); System.out.println("请输入要查找的ID:"); String strId = scan.next(); Iterator<Product> it = pList.iterator(); boolean flag = false; Product p = null; while(it.hasNext()){ p = it.next(); if(p.getPid().equals(strId)){ flag = true; } } // 也可以通过如下方式查找:该方式能查找到是否含有,并没有拿出真正的商品对象 /*Product p = new Product(); p.setPid(strId); // contains是依据元素的equals方法来判断是否包含 boolean flag = pList.contains(p);*/ if(flag){ System.out.println("存在该商品,如下:\n"+p); }else{ System.out.println("你所要查找的商品不存在"); } } } package homework; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class Product { private String pid; private String pname; private Date date; private double price; public Product() { super(); } public Product(String pid, String pname, Date date, double price) { super(); this.setDate(date); this.setPid(pid); this.setPname(pname); this.setPrice(price); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((pid == null) ? 0 : pid.hashCode()); return result; } @Override public String toString() { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String strDate = df.format(this.date); return "Product [pid=" + pid + ", pname=" + pname + ", date=" + strDate + ", price=" + price + "]"; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Product other = (Product) obj; if (pid == null) { if (other.pid != null) return false; } else if (!pid.equals(other.pid)) return false; return true; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } }
请输入商品信息
格式:编号,商品名称,进货日期,价格
1,niurou,2013-2-3,36
是否继续?Y继续/N退出
y
请输入商品信息
格式:编号,商品名称,进货日期,价格
2,yangrou,2013-2-4,34
是否继续?Y继续/N退出
y
请输入商品信息
格式:编号,商品名称,进货日期,价格
3,bocai,2013-2-5,12
是否继续?Y继续/N退出
n
请输入要查找的ID:
2
存在该商品,如下:
Product [pid=3, pname=bocai, date=2013-02-05, price=12.0]