如何在Java

时间:2019-03-26 04:57:44

标签: java

假设有一个名为Product的类,它具有两个名为p1和p2的乘积对象,它们具有以下字段:

  

P1->整数productId = 123,字符串名称=“ iPhoneS8”,整数单价   = 1000,字符串datMfs =“ 12/18/2017”。 P2-> int productId = 124,字符串名称=“ Samsung Galaxy S8”,int unitPrice = 1200,字符串datMfs   =“ 05/22/2016”。

第一个问题是

  

1),为产品编写一个Java代码,包括getter和setter   方法,包括默认值在内的任何三个重载构造函数。我的   解决方案代码如下。

class Product {
    Product() {//default Constractor

    }

    Product(int price) {//Overloaded Constractor1

    }

    Product(String name) {//Overloaded Constractor2

    }

    Product(String name, double pri) {//Overloaded Constractor3

    }

    Product(int name, double pri) {//Overloaded Constractor4

    }
      // The following is the product fields   

    private int productId;
    private String name;
    private int unitPrice;
    private String dateMdft;
//The following is getters and setters

    public int getproductId() {
        return productId;
    }

    public void setProductId(int productId) {
        this.productId = productId;
    }

    public String getproductName() {
        return name;
    }

    public void setProductname(String name) {
        this.name = name;
    }

    public int getproductunitPrice() {
        return unitPrice;
    }

    public void setUnitPrice(int unitPrice) {
        this.unitPrice = unitPrice;
    }

    public int getUnitPrice() {
        return unitPrice;
    }

    public void setDateMan(String dateMdft) {
        this.dateMdft = dateMdft;
    }

    public String getDateManftd(String dateMdft) {
        return dateMdft;
    }

第二个问题是

  

2),编写一个名为printOutedDatedProduct(从上面开始)的方法,然后   遍历对象并仅打印出数据   将过时的产品以 CSV格式显示在屏幕上。该方法应打印    124,三星Galaxy S8,1200,2016年5月22日

我真的很努力地编写方法并打印出过时的产品,因此,如果有人帮助我,我非常感谢社区。我也很乐意就第一个问题的解决方案发表任何意见。非常感谢!

3 个答案:

答案 0 :(得分:0)

我建议将日期存储在LocalDate对象中。为什么选择LocalDate?这是一个编写良好且经过测试的日期维护类。 如何实例化和比较:

LocalDate d1 = LocalDate.of(2000, 06, 26);//YYYY-MM-DD
LocalDate d2 = LocalDate.now();

System.out.println(d1.compareTo(d2));//if d1 < d2, returns negative integer (difference between dates), otherwise positive integer. 

d1.compareTo(d2)是什么?它返回一个整数,表示日期之间的差。它采用不匹配的日期的第一项,并从第一项中减去第二项。例如:2019-03-14与现在(2019-03-29)相比将返回14-29 = -15

您需要为compareTo(LocalDate)实例的每个LocalDate字段调用Product方法,并与LocalDate.now();进行比较。当数字为负数时,打印有关产品的信息。

答案 1 :(得分:0)

当您尝试将toString用作object时,Java默认会调用String方法,那么您需要做的就是准备Product {{1 }}方法如下:

toString

此后,打印将很容易,但是您需要检查public String toString(){ return productId+", "+name+", "+unitPrice+", "+dateMdft; } ,将date操作为date会花费很多。您可以找到hereString日期最佳实践{p>

在您学会了如何使用java Date和如何检查日期之后,现在您需要编写所有在您拥有的数组上循环并检查日期和{{1 }}您的数据。

答案 2 :(得分:0)

首先,考虑字段的正确数据类型。您可以将String用于提交日期,但是如何比较这些日期?有强大的JDK datetime API,让我们使用它。我建议使用LocaDate,因为您只需要日期部分。

第二。您的构造函数不应为空或无用。您可以在构造函数中初始化对象字段。例如:

Product(String name) {
    this(name, 0);
}

Product(String name, int unitPrice) {
    this(name, unitPrice, LocalDate.now());
}

Product(String name, int unitPrice, LocalDate dateMdft) {
    this.name = name;
    this.unitPrice = unitPrice;
    this.dateMdft = dateMdft;
}

下一步是对象的字符串表示方法。您可以覆盖toString或创建另一个。

private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("MM/dd/YYYY");

@Override
public String toString() {
    return productId + "," + name + "," + unitPrice + "," + dateTimeFormatter.format(dateMdft);
}

最后,过滤并打印。

public static void main(String args[]) {
    List<Product> products = new ArrayList<>();
    products.add(new Product("1", 100, LocalDate.now().minusDays(1)));
    products.add(new Product("2", 150, LocalDate.now().minusDays(2)));
    products.add(new Product("3", 250, LocalDate.now()));

    System.out.println("Via for loop:");
    for (Product p: products) {
        if (p.getDateMdft().isBefore(LocalDate.now())) {
            System.out.println(p);
        }
    }

    System.out.println("Via stream API:");
    products
            .stream()
            .filter(p -> p.getDateMdft().isBefore(LocalDate.now()))
            .forEach(System.out::println);
}