各位高手看看,最后输出有问题,我不知道哪错了,看了半天,请教下,谢谢了这是题目。题目是创建Comic实现存储图书的名称,编号,基价和新旧程度。其中新旧程度被描述为:崭新(mint),九成新(near mint),
很新(fine),一般(good),很旧(poor).
在此类中实现为图书设定价格的方法。价格根据新旧程度和基价进行设定,每种情况下对价格的影响如下:
崭新:价格为基价的3倍;
九成新:价格为基价的2倍;
很新:价格为1.5倍;
新价:格为基价;
一般:价格为基价的0.5倍;
很旧:价格为基价的0.25倍;import java.util.*;
public class Comic {

private String name;//书的名称
private int id;  //编号
private double base; //基价
private String xinjiu;//新旧程度

public Comic(String name,int id,double base,String xinjiu){
             this.name=name;
             this.id=id;
             this.base=base;
             this.xinjiu=xinjiu;
}

public String getName(){ //set get 方法
return name;
} public void setName(String name) {
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public double getBase() {
return base;
} public void setBase(double base) {
this.base = base;
} public String getXinjiu() {
return xinjiu;
} public void setXinjiu(String xinjiu) {
this.xinjiu = xinjiu;
}
public double liu(HashMap map){ 
/*声明一个大Double型的d并赋初始值为null(空) ,
 * 在声明一个小double型的sum并赋初始值为0.0,
 * 用来存储总价,如果type!=null  这里map.get 是取值,
 * 取的是新旧值, 那么就把这个新旧值赋给d,
 * 然后再用这个新旧值在去调用showHashMap(); 
 * 方法里的某一方法,查询是否要乘以几倍,
 * 用这个倍数再乘以基价赋给sum就是这本书的总价格了,
 * 最后返回值是 sum
 */
Double d=null;
double sum=0.0;
if(map.get(this.xinjiu)!=null){
d=(Double)map.get(this.xinjiu);
sum=d.doubleValue()*base;
}
return sum;
} public static void Map(){ 
HashMap jie=new HashMap();
jie.put("mint",new Double(3.0)); //展成新  就是基价的3倍
jie.put("neat mint",new Double(2.0)); //九成新 就是2倍
jie.put("very fine",new Double(1.5)); //很信 就是1.5倍
jie.put("fine",new Double(1.0)); //新  就是1倍
jie.put("good",new Double(0.5));  //一般 0.5倍
jie.put("poor",new Double(0.25)); //很旧 0.25倍
} public static void main(String[] args) {
Comic c=new Comic("java",123,30.3,"zhanxin");

System.out.println(c.liu(jie)); } }

解决方案 »

  1.   

    你的代码有好几个错误  首先 你的 Comic c=new Comic("java",123,30.3,"zhanxin"); 中的zhanxin 在Map里面找不到   还有的是你的静态方法没有调用 ,只有调用了才可以!
    静态方法的优点是:再类的实例化之前就可以调用:但你不调用时不执行的,和静态变量不同!
    下面的代码可以运行:import java.util.*; 
    public class Comic { 
    static HashMap jie=new HashMap(); 
    private String name;//书的名称 
    private int id;  //编号 
    private double base; //基价 
    private String xinjiu;//新旧程度 public Comic(String name,int id,double base,String xinjiu){ 
                this.name=name; 
                this.id=id; 
                this.base=base; 
                this.xinjiu=xinjiu; 

    public double liu(HashMap map){ 
    Double d=null; 
    double sum=0.0; 
    if(map.get(xinjiu)!=null){ 
    d=(Double)map.get(this.xinjiu); 
    sum=d.doubleValue()*base; 

    return sum; 
    } public static void Map(){ jie.put("mint",new Double(3.0)); //展成新  就是基价的3倍 
    jie.put("neat mint",new Double(2.0)); //九成新 就是2倍 
    jie.put("very fine",new Double(1.5)); //很信 就是1.5倍 
    jie.put("fine",new Double(1.0)); //新  就是1倍 
    jie.put("good",new Double(0.5));  //一般 0.5倍 
    jie.put("poor",new Double(0.25)); //很旧 0.25倍 }
    public static void main(String[] args) { 
    Comic.Map();
    Comic c=new Comic("java",123,30.3,"mint"); 
    System.out.println(c.liu(jie)); } } 
      

  2.   

    System.out.println(c.liu(jie)); 
    这个jie是什么
    是不是应该是"jie"?
      

  3.   

    帮你改了一下
    现在可以运行了
    主要修改的是Map方法import java.util.*;public class Comic { private String name;// 书的名称
    private int id; // 编号
    private double base; // 基价
    private String xinjiu;// 新旧程度 public Comic(String name, int id, double base, String xinjiu) {
    this.name = name;
    this.id = id;
    this.base = base;
    this.xinjiu = xinjiu;
    } public String getName() { // set get 方法
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int getId() {
    return id;
    } public void setId(int id) {
    this.id = id;
    } public double getBase() {
    return base;
    } public void setBase(double base) {
    this.base = base;
    } public String getXinjiu() {
    return xinjiu;
    } public void setXinjiu(String xinjiu) {
    this.xinjiu = xinjiu;
    } public double liu(HashMap map) {
    /*
     * 声明一个大Double型的d并赋初始值为null(空) , 在声明一个小double型的sum并赋初始值为0.0,
     * 用来存储总价,如果type!=null 这里map.get 是取值, 取的是新旧值, 那么就把这个新旧值赋给d,
     * 然后再用这个新旧值在去调用showHashMap(); 方法里的某一方法,查询是否要乘以几倍,
     * 用这个倍数再乘以基价赋给sum就是这本书的总价格了, 最后返回值是 sum
     */
    Double d = null;
    double sum = 0.0;
    if (map.get(this.xinjiu) != null) {
    d = (Double) map.get(this.xinjiu);
    sum = d.doubleValue() * base;
    }
    return sum;
    } public static HashMap getMap() {
    HashMap jie = new HashMap();
    jie.put("mint", new Double(3.0)); // 展成新 就是基价的3倍
    jie.put("neat mint", new Double(2.0)); // 九成新 就是2倍
    jie.put("very fine", new Double(1.5)); // 很信 就是1.5倍
    jie.put("fine", new Double(1.0)); // 新 就是1倍
    jie.put("good", new Double(0.5)); // 一般 0.5倍
    jie.put("poor", new Double(0.25)); // 很旧 0.25倍
    return jie;
    } public static void main(String[] args) {
    // Comic c = new Comic("java", 123, 30.3, "zhanxin");
    Comic c = new Comic("java", 123, 30.3, "mint");// System.out.println(c.liu(jie));
    System.out.println(c.liu(Comic.getMap())); }}