import java.text.SimpleDateFormat;
import java.util.*;
class Cake
{
String cakeCode;
String cakeName;
float price;
String getCakeId()
{
return cakeCode;
}
void setCakeId(String cakeCode)
{
this.cakeCode=cakeCode;
}
String getCakeName()
{
return cakeName;
}
void setCakeName(String cakeName)
{
this.cakeName=cakeName;
}
float getPrice()
{
return price;
}
void setPrice(float price)
{
this.price=price;
}
}
class SaleRecord
{
int saleId;
String saleDate;
String cakeCode;
float weight;
float price;
float saleSum;
String getCakeCode()
{
return cakeCode;
}
void setCakeCode(String cakeCode)
{
this.cakeCode=cakeCode;
}
float getPrice()
{
return price;
}
void setPrice(float price)
{
this.price=price;
}
String getSaleDate()
{
return saleDate;
}
void setSaleDate(String saleDate)
{
this.saleDate=saleDate;
}
int getSaleId()
{
return saleId;
}
void setSaleId(int saleId)
{
this.saleId=saleId;
}
float getSaleSum()
{
return saleSum;
}
void setSaleSum(float SaleSum)
{
this.saleSum=SaleSum;
}
float getWeight()
{
return weight;
}
void setWeight(float weight)
{
this.weight=weight;
}

}
public class CakeSaleTree
{
static TreeMap SALEMAP=null;
static int saleIdCounter=1;
public String[][] CAKEINFO=
{
{"A01","法式蛋糕","35"},
{"A02","意式蛋糕","40"},
    {"B01","巧克力蛋糕","45"},
    {"B02","冰淇淋蛋糕","50"},
    {"B03","奶油水果蛋糕","50"},
    {"C01","草莓芝式蛋糕","70"},
    {"C02","朗姆酒木蛋糕","80"}
};
HashMap converCakeinfo()
{
HashMap hm=new HashMap();
int cakeSize=CAKEINFO.length;
for(int n=0;n<cakeSize;n++)
{
Cake obj=new Cake();
obj.setCakeId(CAKEINFO[n][0]);
obj.setCakeName(CAKEINFO[n][1]);
obj.setPrice(Float.parseFloat(CAKEINFO[n][2]));
hm.put(CAKEINFO[n][0],obj);

}
return hm;
}
String getCurrentDate()
{
SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd");
String dateTime=s.format(new Date());
return dateTime;
}
SaleRecord getSaleRecord(String cakeCode,float weight)
{
HashMap hm = converCakeinfo();
float price=((Cake)hm.get(cakeCode)).getPrice();
String saleDate=getCurrentDate();
float saleSum=price*weight;
SaleRecord obj=new SaleRecord();
obj.setSaleId(saleIdCounter++);
obj.setSaleDate(saleDate);
obj.setCakeCode(cakeCode);
obj.setPrice(price);
obj.setWeight(weight);
obj.setSaleSum(saleSum);
return obj;
}
void addSumRecord(String cakeCode,float weight)
{
SaleRecord saleObj = getSaleRecord(cakeCode,weight);
if (SALEMAP==null)
{
SALEMAP=new TreeMap();
}
SALEMAP.put(saleObj.getSaleSum(), saleObj);
}
void viewSaleList()
{
if(SALEMAP == null){
return;
}
int size=SALEMAP.size();
System.out.println("序号\t\t"+"日期\t\t"+"蛋糕编号\t\t"+"销售金额");
for(int n=0;n<size;n++)
{
SaleRecord obj=(SaleRecord)SALEMAP.get(n);
int  Id=obj.getSaleId();
String date=obj.getSaleDate();
String cakeCode=obj.getCakeCode();
float saleSum=obj.getSaleSum();
System.out.println(Id+"\t\t"+date+"\t\t"+cakeCode+"\t\t"+saleSum);
}
}
public static void main(String[] args)
{
CakeSaleTree cakeSaleTree = new CakeSaleTree();
System.out.println("\n        欢迎进入收银系统!\n\n");
do
{
System.out.println("请输入蛋糕编号:");
Scanner s=new Scanner(System.in);
String cakeCode=s.next().trim().toUpperCase();
System.out.println("请输入蛋糕重量:");
float weight = Float.parseFloat(s.next().trim());
cakeSaleTree.addSumRecord(cakeCode,weight);
System.out.println("\n是否继续录入?[y继续录入,e退出系统,v查看报表]");
String key=s.next().trim().toLowerCase();
if(key.equals("e")) 
{
System.out.println("系统已经退出!");
break;
}
if(key.equals("v"))
{
cakeSaleTree.viewSaleList();
}
}while(true);
}
}

解决方案 »

  1.   

    SALEMAP.put(saleObj.getSaleSum(), saleObj);
    for(int n=0;n <size;n++) 

    SaleRecord obj=(SaleRecord)SALEMAP.get(n); 
    int  Id=obj.getSaleId(); 
    String date=obj.getSaleDate(); 
    String cakeCode=obj.getCakeCode(); 
    float saleSum=obj.getSaleSum(); 
    System.out.println(Id+"\t\t"+date+"\t\t"+cakeCode+"\t\t"+saleSum); 
    } 你的n值是从0开始,而且是int型
    但是你之前存进去的key值对应的是SaleSum,类型是float
    当然会出错啊
    你自己去改一下吧
      

  2.   

    我把SALEMAP.put(saleObj.getSaleSum(), saleObj); 
    改成SALEMAP.put(saleObj. getSaleId(), saleObj);//saleId是int型的,还是有错误啊!
      

  3.   


            欢迎进入收银系统!
    请输入蛋糕编号:
    a02
    请输入蛋糕重量:
    2是否继续录入?[y继续录入,e退出系统,v查看报表]
    v
    Exception in thread "main" 序号 日期 蛋糕编号 销售金额
    java.lang.NullPointerException
    at CakeSaleTree.viewSaleList(CakeSaleTree.java:161)
    at CakeSaleTree.main(CakeSaleTree.java:189)
      

  4.   

    It is hard to read your code. :-(
      

  5.   

    你的saleSum的含义是什么列?
    为什么要从0开始取值啊?
    这个你有没有想清楚?
      

  6.   

    你的saleSum的含义是什么列?
    为什么要从0开始取值啊?
    这个你有没有想清楚?
      

  7.   

    LZ 我教你怎么贴代码,这样贴的代码对回复的人确实是个不小的挑战
    上面有个# ,按下后选择java,我代码贴在这中间就行了
      

  8.   

    static int saleIdCounter=1; 你计数是从1开始的,放在map里也是从1开始,没有id=0的情况
    viewSaleList() 里n是从0开始的, SALEMAP.get(n)第一次就是0,没有,就会报错
    建议把saleIdCounter初始值设为0,或者循环里计数都从1开始。
      

  9.   

    import java.text.SimpleDateFormat; 
    import java.util.*; 
    class Cake 

    String cakeCode; 
    String cakeName; 
    float price; 
    String getCakeId() 

    return cakeCode; 

    void setCakeId(String cakeCode) 

    this.cakeCode=cakeCode; 

    String getCakeName() 

    return cakeName; 

    void setCakeName(String cakeName) 

    this.cakeName=cakeName; 

    float getPrice() 

    return price; 

    void setPrice(float price) 

    this.price=price; 


    class SaleRecord 

    int saleId; 
    String saleDate; 
    String cakeCode; 
    float weight; 
    float price; 
    float saleSum; 
    String getCakeCode() 

    return cakeCode; 

    void setCakeCode(String cakeCode) 

    this.cakeCode=cakeCode; 

    float getPrice() 

    return price; 

    void setPrice(float price) 

    this.price=price; 

    String getSaleDate() 

    return saleDate; 

    void setSaleDate(String saleDate) 

    this.saleDate=saleDate; 

    int getSaleId() 

    return saleId; 

    void setSaleId(int saleId) 

    this.saleId=saleId; 

    float getSaleSum() 

    return saleSum; 

    void setSaleSum(float SaleSum) 

    this.saleSum=SaleSum; 

    float getWeight() 

    return weight; 

    void setWeight(float weight) 

    this.weight=weight; 
    } } 
    public class CakeSaleTree 

    static TreeMap SALEMAP=null; 
    static int saleIdCounter=1; 
    public String[][] CAKEINFO= 

    {"A01","法式蛋糕","35"}, 
    {"A02","意式蛋糕","40"}, 
        {"B01","巧克力蛋糕","45"}, 
        {"B02","冰淇淋蛋糕","50"}, 
        {"B03","奶油水果蛋糕","50"}, 
        {"C01","草莓芝式蛋糕","70"}, 
        {"C02","朗姆酒木蛋糕","80"} 
    }; 
    HashMap converCakeinfo() 

    HashMap hm=new HashMap(); 
    int cakeSize=CAKEINFO.length; 
    for(int n=0;n <cakeSize;n++) 

    Cake obj=new Cake(); 
    obj.setCakeId(CAKEINFO[n][0]); 
    obj.setCakeName(CAKEINFO[n][1]); 
    obj.setPrice(Float.parseFloat(CAKEINFO[n][2])); 
    hm.put(CAKEINFO[n][0],obj); } 
    return hm; 

    String getCurrentDate() 

    SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd"); 
    String dateTime=s.format(new Date()); 
    return dateTime; 

    SaleRecord getSaleRecord(String cakeCode,float weight) 

    HashMap hm = converCakeinfo(); 
    float price=((Cake)hm.get(cakeCode)).getPrice(); 
    String saleDate=getCurrentDate(); 
    float saleSum=price*weight; 
    SaleRecord obj=new SaleRecord(); 
    obj.setSaleId(saleIdCounter++); 
    obj.setSaleDate(saleDate); 
    obj.setCakeCode(cakeCode); 
    obj.setPrice(price); 
    obj.setWeight(weight); 
    obj.setSaleSum(saleSum); 
    return obj; 

    void addSumRecord(String cakeCode,float weight) 

    SaleRecord saleObj = getSaleRecord(cakeCode,weight); 
    if (SALEMAP==null) 

    SALEMAP=new TreeMap(); 

    SALEMAP.put(saleObj.getSaleSum(), saleObj); 

    void viewSaleList() 

    if(SALEMAP == null){ 
    return; 

    int size=SALEMAP.size(); 
    System.out.println("序号\t\t"+"日期\t\t"+"蛋糕编号\t\t"+"销售金额"); 
    for(int n=0;n <size;n++) 

    SaleRecord obj=(SaleRecord)SALEMAP.get(n); 
    int  Id=obj.getSaleId(); 
    String date=obj.getSaleDate(); 
    String cakeCode=obj.getCakeCode(); 
    float saleSum=obj.getSaleSum(); 
    System.out.println(Id+"\t\t"+date+"\t\t"+cakeCode+"\t\t"+saleSum); 


    public static void main(String[] args) 

    CakeSaleTree cakeSaleTree = new CakeSaleTree(); 
    System.out.println("\n        欢迎进入收银系统!\n\n"); 
    do 

    System.out.println("请输入蛋糕编号:"); 
    Scanner s=new Scanner(System.in); 
    String cakeCode=s.next().trim().toUpperCase(); 
    System.out.println("请输入蛋糕重量:"); 
    float weight = Float.parseFloat(s.next().trim()); 
    cakeSaleTree.addSumRecord(cakeCode,weight); 
    System.out.println("\n是否继续录入?[y继续录入,e退出系统,v查看报表]"); 
    String key=s.next().trim().toLowerCase(); 
    if(key.equals("e")) 

    System.out.println("系统已经退出!"); 
    break; 

    if(key.equals("v")) 

    cakeSaleTree.viewSaleList(); 

    }while(true); 


      

  10.   

    UP试下效果,调整一下
    import java.text.SimpleDateFormat;
    import java.util.*;class Cake {
    String cakeCode;
    String cakeName;
    float price; String getCakeId() {
    return cakeCode;
    } void setCakeId(String cakeCode) {
    this.cakeCode = cakeCode;
    } String getCakeName() {
    return cakeName;
    } void setCakeName(String cakeName) {
    this.cakeName = cakeName;
    } float getPrice() {
    return price;
    } void setPrice(float price) {
    this.price = price;
    }
    }class SaleRecord {
    int saleId;
    String saleDate;
    String cakeCode;
    float weight;
    float price;
    float saleSum; String getCakeCode() {
    return cakeCode;
    } void setCakeCode(String cakeCode) {
    this.cakeCode = cakeCode;
    } float getPrice() {
    return price;
    } void setPrice(float price) {
    this.price = price;
    } String getSaleDate() {
    return saleDate;
    } void setSaleDate(String saleDate) {
    this.saleDate = saleDate;
    } int getSaleId() {
    return saleId;
    } void setSaleId(int saleId) {
    this.saleId = saleId;
    } float getSaleSum() {
    return saleSum;
    } void setSaleSum(float SaleSum) {
    this.saleSum = SaleSum;
    } float getWeight() {
    return weight;
    } void setWeight(float weight) {
    this.weight = weight;
    }}public class CakeSaleTree {
    static TreeMap SALEMAP = null;
    static int saleIdCounter = 1;
    public String[][] CAKEINFO = { { "A01", "法式蛋糕", "35" },
    { "A02", "意式蛋糕", "40" }, { "B01", "巧克力蛋糕", "45" },
    { "B02", "冰淇淋蛋糕", "50" }, { "B03", "奶油水果蛋糕", "50" },
    { "C01", "草莓芝式蛋糕", "70" }, { "C02", "朗姆酒木蛋糕", "80" } }; HashMap converCakeinfo() {
    HashMap hm = new HashMap();
    int cakeSize = CAKEINFO.length;
    for (int n = 0; n < cakeSize; n++) {
    Cake obj = new Cake();
    obj.setCakeId(CAKEINFO[n][0]);
    obj.setCakeName(CAKEINFO[n][1]);
    obj.setPrice(Float.parseFloat(CAKEINFO[n][2]));
    hm.put(CAKEINFO[n][0], obj); }
    return hm;
    } String getCurrentDate() {
    SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
    String dateTime = s.format(new Date());
    return dateTime;
    } SaleRecord getSaleRecord(String cakeCode, float weight) {
    HashMap hm = converCakeinfo();
    float price = ((Cake) hm.get(cakeCode)).getPrice();
    String saleDate = getCurrentDate();
    float saleSum = price * weight;
    SaleRecord obj = new SaleRecord();
    obj.setSaleId(saleIdCounter++);
    obj.setSaleDate(saleDate);
    obj.setCakeCode(cakeCode);
    obj.setPrice(price);
    obj.setWeight(weight);
    obj.setSaleSum(saleSum);
    return obj;
    } void addSumRecord(String cakeCode, float weight) {
    SaleRecord saleObj = getSaleRecord(cakeCode, weight);
    if (SALEMAP == null) {
    SALEMAP = new TreeMap();
    }
    SALEMAP.put(saleObj.getSaleSum(), saleObj);
    } void viewSaleList() {
    if (SALEMAP == null) {
    return;
    }
    int size = SALEMAP.size();
    System.out.println("序号\t\t" + "日期\t\t" + "蛋糕编号\t\t" + "销售金额");
    for (int n = 0; n < size; n++) {
    SaleRecord obj = (SaleRecord) SALEMAP.get(n);
    int Id = obj.getSaleId();
    String date = obj.getSaleDate();
    String cakeCode = obj.getCakeCode();
    float saleSum = obj.getSaleSum();
    System.out.println(Id + "\t\t" + date + "\t\t" + cakeCode + "\t\t"
    + saleSum);
    }
    } public static void main(String[] args) {
    CakeSaleTree cakeSaleTree = new CakeSaleTree();
    System.out.println("\n        欢迎进入收银系统!\n\n");
    do {
    System.out.println("请输入蛋糕编号:");
    Scanner s = new Scanner(System.in);
    String cakeCode = s.next().trim().toUpperCase();
    System.out.println("请输入蛋糕重量:");
    float weight = Float.parseFloat(s.next().trim());
    cakeSaleTree.addSumRecord(cakeCode, weight);
    System.out.println("\n是否继续录入?[y继续录入,e退出系统,v查看报表]");
    String key = s.next().trim().toLowerCase();
    if (key.equals("e")) {
    System.out.println("系统已经退出!");
    break;
    }
    if (key.equals("v")) {
    cakeSaleTree.viewSaleList();
    }
    } while (true);
    }
    }