从 Getter 和 Java 中的设置器获取值
Getting the Value from Getter and Setters in Java
这是 getter 和 setter:
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;
}
}
Class 具有根据 txt 文件中读取的代码设置价格并设置总价的方法:
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());
}
Class 调用方法:
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,但不相加。当按下“添加到购物车”按钮时,如何保留这些值并将价格加到 totalPrice 中?
谢谢你。 T_T
您对同一个对象调用了 setPrice() 两次,因此每次对同一个对象调用 setPrice(price) 时都会替换存储在 price 变量中的旧值。这就是您获得相同输出的原因。
您从不调用 setTotalPrice(),因此从不设置变量 totalPrice 的值,因此它始终为 0。
对于您正在尝试做的事情,您的实施是错误的。
你可以做很多事情来解决这个问题,两种方法是:
A) 有一个存储价格的列表,然后在 getTotalPrice() 中对该列表中的所有值求和,return 求和值。
B) 代替 setPrice(),实现一个增加价格的方法,每次调用该方法时都会将一个整数参数添加到 totalPrice 变量
您在每个添加操作中创建一个新的 Icb_Model
,因为它在 addToCart()
方法中被定义为局部变量:
public void addToCart() throws IOException {
...
Icb_Model model = new Icb_Model();
...
model.setPrice(29995);
...
}
因此您永远无法将新值与前一个值相加。
将其设为实例字段并实例化一次:
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());
...
}
检查你的 while 循环。您不使用花括号块,因此只有下一行是 while 主体。这将导致数据被设置到最后一行并且 switch 语句只被执行一次。
这是 getter 和 setter:
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;
}
}
Class 具有根据 txt 文件中读取的代码设置价格并设置总价的方法:
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());
}
Class 调用方法:
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,但不相加。当按下“添加到购物车”按钮时,如何保留这些值并将价格加到 totalPrice 中? 谢谢你。 T_T
您对同一个对象调用了 setPrice() 两次,因此每次对同一个对象调用 setPrice(price) 时都会替换存储在 price 变量中的旧值。这就是您获得相同输出的原因。
您从不调用 setTotalPrice(),因此从不设置变量 totalPrice 的值,因此它始终为 0。
对于您正在尝试做的事情,您的实施是错误的。
你可以做很多事情来解决这个问题,两种方法是:
A) 有一个存储价格的列表,然后在 getTotalPrice() 中对该列表中的所有值求和,return 求和值。
B) 代替 setPrice(),实现一个增加价格的方法,每次调用该方法时都会将一个整数参数添加到 totalPrice 变量
您在每个添加操作中创建一个新的 Icb_Model
,因为它在 addToCart()
方法中被定义为局部变量:
public void addToCart() throws IOException {
...
Icb_Model model = new Icb_Model();
...
model.setPrice(29995);
...
}
因此您永远无法将新值与前一个值相加。
将其设为实例字段并实例化一次:
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());
...
}
检查你的 while 循环。您不使用花括号块,因此只有下一行是 while 主体。这将导致数据被设置到最后一行并且 switch 语句只被执行一次。