限制价格必须为10的问题?为什么价格为9时也是正常输出的?

限制价格必须为10的问题?为什么价格为9时也是正常输出的?

public class Book {
   private String bookname;
   private String auther;
   private String press;

   public String getBookname() {
       return bookname;
   }

   public String getAuther() {
       return auther;
   }

   public String getPress() {
       return press;
   }

   public void setPress(String press) {
     this.press = press;
   }

   public double getPrice() {
       return price;
   }

   public void setPrice(double price) {
       if(price < 10){
           System.out.println("价格必须大于10");
           this.price = 10;
       }
       this.price = price;
   }

   private double price;

   public  Book(String bookname,String auther,String press,Double price){
       this.bookname = bookname;
       this.auther = auther;
       this.press = press;
       this.price = price;
   }
   public void info(){
       System.out.println("书名: "+bookname+'\n'+"作者: "+auther+'\n'+"出版社: "+press+'\n'+"价格: "+price);

   }

}



ublic class BookTest {
   public static void main(String[] args){
       Book bb = new Book("红楼梦","曹雪芹","人民文学出版社",9.00);
       bb.info();
       System.out.println("=====================");
       Book bb1 = new Book("小李飞刀","古龙","中国长安出版社",11.00);
       bb1.info();
   }
}


------------------------------------------------改过后的代码

public class Book {

    private String bookname;

    private String auther;

    private String press;

    private double price;

    

    

    public Book(String bookname,String auther,String press,double price){

    this.bookname = bookname;

    this.auther = auther;

    this.setPress(press);

    this.setPrice(price);

}

    //get和set方法

    public String getBookname() {

        return bookname;

    }


    public String getAuther() {

        return auther;

    }


    public String getPress() {

        return press;

    }


    public void setPress(String press) {

        this.press = press;

    }

    public double getPrice() {

        return price;

    }

    public void setPrice(double price) {

        if(price < 10){

            price=10.0;

        }

        this.price = price;  

    }

    public void info(){

        System.out.println("书名:"+bookname);

        System.out.println("作者:"+auther);

        System.out.println("出版社:"+press);

        System.out.println("价格:"+price+"元");

    }

}


public class BookTest {

    public static void main(String[] args){

        Book bb = new Book("红楼梦","曹雪芹","人名文学出版社",9.0);

        Book bb1= new Book("小李飞刀","古龙","中国长安出版社",55.5);

        bb.info();

        System.out.println("=======================");

        bb1.info();

    }

}


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

因为你的构造方法里面根本没有调用set()方法阿,所以set()方法里的限制条件根本没用到

  • 未知数X 提问者 #1
    可以详细说明一下 改如何修改吗?
    2017-10-05 09:20:57
  • 闪光棒 回复 提问者 未知数X #2
    public Book(String bookname,String auther,String press,Double price){ this.setBookname(bookname); this.setAuther(auther); this.setPress(press); this.setPrice(price); } 就是调用你创建的setter方法
    2017-10-05 13:04:13
  • 未知数X 提问者 #3
    非常感谢!
    2017-10-05 13:54:59
冬日里的飘雪 2017-10-05 13:38:17

http://img1.sycdn.imooc.com/climg//59d5c4ee0001d46707700516.jpg

this.price = price; 这个语句需要加在else语句里面,否则价格强制设置为10 后,后面的这个语句又重新给价格设置为9了,覆盖了之前 的赋值


  • 提问者 未知数X #1
    public class Book { private String bookname; private String auther; private String press; private double price; public Book(String bookname,String auther,String press,double price){ this.bookname = bookname; this.auther = auther; this.setPress(press); this.setPrice(price); } //get和set方法 public String getBookname() { return bookname; } public String getAuther() { return auther; } public String getPress() { return press; } public void setPress(String press) { this.press = press; } public double getPrice() { return price; } public void setPrice(double price) { if(price < 10){ price=10.0; } this.price = price; } public void info(){ System.out.println("书名:"+bookname); System.out.println("作者:"+auther); System.out.println("出版社:"+press); System.out.println("价格:"+price+"元"); } } 照你的方法我试过反而输出错误了 楼上有我修改过的代码 麻烦指教一下为什么
    2017-10-05 16:31:07
  • 提问者 未知数X #2
    照你的方法我试过反而输出错误了 楼上有我修改过的代码 麻烦指教一下为什么
    2017-10-05 16:41:25
没有马甲线的安琪拉 2017-10-05 12:40:06

把构造方法里的属性赋值,修改为this.set***(**);的方法调用就可以了。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师