首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中从Getter和Getter获取值

在Java中从Getter和Getter获取值
EN

Stack Overflow用户
提问于 2018-03-03 17:35:11
回答 3查看 2.6K关注 0票数 0

下面是getter和setter:

代码语言:javascript
复制
public class Icb_Model {

private double price;
private double totalPrice;
public double getPrice() {
    return price;
}
public void setPrice(double price) {
    this.price = price;

}
public double getTotalPrice() {
    return totalPrice;
}
public void setTotalPrice(double totalPrice) {
    this.totalPrice = totalPrice;

    }

}

类的方法,该方法根据在that文件上读取的代码设置价格,并设置totalPrice:

代码语言:javascript
复制
public class Icb_Cart {

    public void addToCart() throws IOException {

            Scanner prodRead = new Scanner(new File("C:\\Users\\Isaiah\\Desktop\\TRUE FINAL PROJ\\FinalProjectPCode.txt"));
            String data = null;
            while(prodRead.hasNextLine()) 
            data = prodRead.nextLine();

            Icb_Model model = new Icb_Model();
        switch(data) {
        case "nb1":
                model.setPrice(29995);
                break;

        case "nb2":
            model.setPrice(24995);
                break;

            }
            model.setTotalPrice(model.getPrice() + model.getTotalPrice());
            JOptionPane.showMessageDialog(null, model.getTotalPrice());
}

调用该方法的类:

代码语言:javascript
复制
JButton btnAddCart = new JButton("Add to Cart");
        btnAddCart.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String code = "nb1";
                try {
                    FileWriter nbcode = new FileWriter("C:\\Users\\Isaiah\\Desktop\\TRUE FINAL PROJ\\FinalProjectPCode.txt");
                    nbcode.write(code);
                    nbcode.flush();
                    nbcode.close();


                    cartMethod.addToCart();

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        });
        btnAddCart.setBounds(696, 11, 89, 23);
        contentPane.add(btnAddCart);

输出始终是29995,但没有加起来。当按下add to Cart按钮时,如何保留这些值并将价格加到totalPrice中?谢谢。T_T

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-03 17:46:02

您可以在每个add操作中创建一个新的Icb_Model,因为它在addToCart()方法中被定义为局部变量:

代码语言:javascript
复制
public void addToCart() throws IOException {                 
 ...
    Icb_Model model = new Icb_Model();
 ...
    model.setPrice(29995);
 ...
}

因此,您永远不能将新值与前一个值相加。

将其作为实例字段并实例化一次:

代码语言:javascript
复制
public class Icb_Cart {
    private  Icb_Model model = new Icb_Model();

    public void addToCart() throws IOException {                 
        ...
        switch(data) {
        case "nb1":
                model.setPrice(29995);
                break;

        case "nb2":
            model.setPrice(24995);
                break;

            }
        model.setTotalPrice(model.getPrice() + model.getTotalPrice());
        JOptionPane.showMessageDialog(null, model.getTotalPrice());
        ...
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-03 17:44:00

每次对同一对象调用setPrice(价格)时,都会对同一对象调用setPrice()两次,从而替换存储在价格变量中的旧值。这就是为什么你会得到相同的输出。

您永远不会调用setTotalPrice(),因此,永远不会设置变量totalPrice的值,因此它始终为0。

对于你正在尝试做的事情,你的实现是错误的。

你可以做很多事情来解决这个问题,有两种方法:

A)有一个存储价格的列表,然后在getTotalPrice()中,对该列表中的所有值求和并返回求和的值。

B)代替setPrice(),实现一个增加价格的方法,该方法将在每次调用该方法时向totalPrice变量添加一个整数参数

票数 0
EN

Stack Overflow用户

发布于 2018-03-03 17:48:01

检查您的while循环。您没有使用大括号块,因此只有下一行将是while正文。这将导致数据被设置到最后一行,并且switch语句只被执行一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49082747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档