题目如下:1、定义一个Product类,该类有String id和double price两个属性,定义无参、有两个参数的构造方法,定义一个void list()方法,该方法在控制台输出id和price属性值,定义getter/setter方法,
2、设计测试类Test,在其main()内创建一个空的ArrayList容器,先创建6个Product对象,依次前5个对象添加到容器中,该容器进行遍历,调用每个对象的list()方法;将索引为1的对象修改为第6个对象,删除索引为3的对象,对该容器进行遍历,遍历时如果对象的price大于1000,则将price修改为原price的0.8倍,再调用对象的list()方法
主要问题有:1、在Product类中定义void list()后,运行测试类输出的是乱码;后修改为tostring输出解决问题,但未达到题目要求;
2、不知道如何写出“对该容器进行遍历,遍历时如果对象的price大于1000,则将price修改为原price的0.8倍,再调用对象的list()方法”的代码。
完成题目内容,解决目前遇到的困难,主要是如何在遍历中修改Price的值以及调用对象的list()方法
1、在Product类中定义void list()后,运行测试类输出的是乱码;后修改为tostring输出解决问题,但未达到题目要求;
直接输出对象,输出的是地址,需要重写object的toString方法,才能输出属性值。
2、不知道如何写出“对该容器进行遍历,遍历时如果对象的price大于1000,则将price修改为原price的0.8倍,再调用对象的list()方法”的代码。
foreach 循环遍历集合就行,对条件进行判断,满足条件,就通过对象.setPrice()方法修改。
List<Product> products= new ArrayList<>();
//省略向list放入对象过程
for(Product product :products){
if(product.getPrice()>1000){
product.setPrice(0.8 * product.getPrice());
product.list()
}
}
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
ArrayList<Product> productlist=new ArrayList<Product>();
Product p1=new Product("牙膏",10);
Product p2=new Product("牙刷",12);
Product p3=new Product("电冰箱",1200);
Product p4=new Product("洗衣机",850);
Product p5=new Product("台灯",125);
Product p6=new Product("沙发",5200);
productlist.add(p1);
productlist.add(p2);
productlist.add(p3);
productlist.add(p4);
productlist.add(p5);
for(int i=0;i<productlist.size();i++){
System.out.println(productlist.get(i));
}
productlist.remove(1);
productlist.set(1,p6);
productlist.remove(3);
System.out.println("-----------------------");
//修改后依旧没有输出内容,并且price的值也没有改变
for(Product product:productlist){
if(product.getPrice()>1000){
product.setPrice((0.8)*product.getPrice);
}
}
}
}
class Product{
private String id;
private double price;
public Product(){}
public Product(String id,double price){
this.id=id;
this.price=price;
}
public String toString(){
return "id:"+this.id+" price:"+this.price;
}
public String getId(){
return id;
}
public void setId(String id){
this.id=id;
}
public double getPrice(){
return price;
}
public void setPrice(double price){
this.price=price;
}
}
编译运行结果不符合题意:foreach遍历没有输出、price的值没有更改