本帖最后由 曹睿翔 于 2013-1-10 15:46 编辑
- //需求:模拟超市收银员的工作,收银员(从键盘录入商品ID时获得商品价格)为顾客购买的商品计算总价
- /*思路:1,商品有自己的共同属性(价格、ID等),抽取出来作为父类,
- * 子类则定义自己特殊的属性(食品有保质期、衣服有颜色尺码等),当超市添加待售商品时,只要继承父类、并加上独有属性即可。
- * 2.每个商品都是ID对应价格,由此想到用Map集合来存放,id作为Key,商品类作为Value
- 3.从键盘录入则用到标准输入流,BufferedReader bufr =
- new BufferedReader(new InputStreamReader(System.in));
- 4.遍历Map用 Set<Map.Entry<String,Goods>> entrySet = map.entrySet();将Map转换为Set集合,
- 用迭代的方法,与输入流中的line对比,获得其Goods对象的Value
- 测试:输入商品的id 1001 按下enter,接着输入2001,按下enter,最后按下over结束程序
-
- */
- import java.io.*;
- import java.util.*;
- public class GetGoodsInfo{
- public static void main(String[] args) throws Exception // 抛出异常,不错try处理
- { //定义两个Goods的子类。Milk和Clothes
- Milk m = new Milk(1001,2.5);
- Clothes clo = new Clothes(2001,100.0);
- //定义一个Map<String,Goods>集合
- Map<String,Goods> map = new HashMap<String,Goods>();
- //加入两个元素
- map.put("1001",m);
- map.put("2001",clo);
- //用Map集合Entry的方法返回Set,目的是用到迭代器
- Set<Map.Entry<String,Goods>> entrySet = map.entrySet();
- //最常见的标准的键盘录入
- BufferedReader bufr =
- new BufferedReader(new InputStreamReader(System.in));
- String line = null;
- double sum = 0;
- while((line=bufr.readLine())!=null)
- {
- if("over".equals(line))//当从console输入over的时候程序停止
- break;
- else
- { Iterator<Map.Entry<String,Goods>> it = entrySet.iterator();
- while(it.hasNext())
- {
- Map.Entry<String,Goods> me = it.next();
- if (me.getKey().equals(line))//通过迭代遍历Map,找出Key对应的Goods对象
- { double d = me.getValue().getPrice();
- sum +=d;
- System.out.println("商品单价为:"+d);
- }
- else
- System.out.println("未找到对应商品,请核查");//<font color="#ff0000">目的是错误输入ID时才打印,为毛输入一次打印一次?</font>
-
- }
- }
-
-
- }
- System.out.println("购买的商品总价为:"+sum);//console打印出结果
- bufr.close();//关闭流
- }
-
-
- }
- class Goods
- {
- private int id;
- private double price;
- public Goods(){
-
- }
- public Goods(int id, double price){
- this.id= id;
- this.price = price;
- }
- public int getId(){
- return id;
- }
- public double getPrice() {
-
- return price;
- }
- }
- class Milk extends Goods
- {
-
- private int id;
- private double price;
-
- public Milk(int id, double price){
- this.id= id;
- this.price = price;
- }
- public int getId(){
- return id;
- }
- public double getPrice() {
-
- return price;
- }
- }
- class Clothes extends Goods
- {
- private int id;
- private double price;
- public Clothes(int id, double price){
- this.id= id;
- this.price = price;
- }
- public int getId(){
- return id;
- }
- public double getPrice() {
-
- return price;
- }
- }
复制代码 昨天写了个小程序试试,没敢往大了写,没加GUI,一试就知道自己的不足了,看来寒假还是需要自己多敲代码,必须自己能不参考视频,API写出框架结构,不全代码。
写这个小东西遇到了多态、构造函数,IO,集合、方法返回值等问题,没能好好考虑代码扩展性等等,也建议大家自己在生活中遇到事情可以简化成代码体现,多练手
上边的那个错误求解释,另外麻烦给点建议,怎么优化代码,我都觉得自己有点拼凑之嫌了
|