Java的数据计算方法

Java的数据计算方法,java,arrays,localdate,Java,Arrays,Localdate,我有一个交付项目,包括以下类名: FoodItem 位置 路线 商店 车辆 仓库 启动器(包括主方法) 接下来我需要做的是:我已经为FoodItem类初始化了一个名为“Oatmine”的对象 此FoodItem有4个属性,如下所示: import java.time.LocalDate; public class FoodItem { public String label; private double volume; private double weight;

我有一个交付项目,包括以下类名:

FoodItem
位置
路线
商店
车辆
仓库
启动器(包括主方法)

接下来我需要做的是:我已经为FoodItem类初始化了一个名为“Oatmine”的对象

此FoodItem有4个属性,如下所示:

import java.time.LocalDate;

public class FoodItem {
    public String label;
    private double volume;
    private double weight;
    private LocalDate expirationDate;
FoodItem oatmeal = new FoodItem("Serving size is 1/2 Cup 40gr");
oatmeal.setVolume(25);
oatmeal.setWeight(0.500);
oatmeal.setExpirationDate(LocalDate.of(2025,2,5));
import java.time.Period;
import java.util.Arrays;
import java.time.LocalDate;

private boolean stillValid(FoodItem foodItem){
        LocalDate date = LocalDate.now();
        LocalDate dayLeft = date.plus(Period.ofDays(3));
        if(foodItem.getExpirationDate() != dayLeft) {
            return true;
        }
        return false;
    }
这些属性的值在Launcher中设置如下:

import java.time.LocalDate;

public class FoodItem {
    public String label;
    private double volume;
    private double weight;
    private LocalDate expirationDate;
FoodItem oatmeal = new FoodItem("Serving size is 1/2 Cup 40gr");
oatmeal.setVolume(25);
oatmeal.setWeight(0.500);
oatmeal.setExpirationDate(LocalDate.of(2025,2,5));
import java.time.Period;
import java.util.Arrays;
import java.time.LocalDate;

private boolean stillValid(FoodItem foodItem){
        LocalDate date = LocalDate.now();
        LocalDate dayLeft = date.plus(Period.ofDays(3));
        if(foodItem.getExpirationDate() != dayLeft) {
            return true;
        }
        return false;
    }
现在我需要做的是计算日期,检查产品的到期日期是否仍然有效,逻辑为(到期日期-今天的日期+3天),为此,我创建了一个名为stillValid的方法,如下所示:

import java.time.LocalDate;

public class FoodItem {
    public String label;
    private double volume;
    private double weight;
    private LocalDate expirationDate;
FoodItem oatmeal = new FoodItem("Serving size is 1/2 Cup 40gr");
oatmeal.setVolume(25);
oatmeal.setWeight(0.500);
oatmeal.setExpirationDate(LocalDate.of(2025,2,5));
import java.time.Period;
import java.util.Arrays;
import java.time.LocalDate;

private boolean stillValid(FoodItem foodItem){
        LocalDate date = LocalDate.now();
        LocalDate dayLeft = date.plus(Period.ofDays(3));
        if(foodItem.getExpirationDate() != dayLeft) {
            return true;
        }
        return false;
    }

现在,我需要在addItem方法中使用此方法,以便检查项目的过期日期是否未过,我可以添加到存储中

public void addItem(FoodItem foodItem) { 
        int stop = 0;
        for (int i = 0; i < foodItemsArray.length; i++) {
            if (foodItemsArray[i] != null) {        
                stop = 1;
                break;
            }
        }
        if (stop == 0) {
            for (int i = 0; i < foodItemsArray.length; i++) {
                if (foodItemsArray[i] != foodItem) {
                    foodItemsArray[i] = foodItem;
                    break;
                }
            }
        }
    }
public void addItem(FoodItem FoodItem){
int stop=0;
for(int i=0;i
在这一部分中,我无法在脑海中创建逻辑,将我的stillValid功能放在addItem主体中,或者即使我正确地执行了stillValid方法。

tl;博士 仔细阅读Javadoc以发现方便的方法,例如
isAfter
plusDays

LocalDate.now().isAfter( this.getExpirationDate().plusDays( 3 ) ) ;
细节 将
stillValid
expired
方法添加到您的
FoodItem
类中,如果这是了解在过期日期前添加三天的规则的合理位置

要比较
LocalDate
,请使用
isAfter
isBefore

public boolean过期()
{
LoalDealDeal=今天LoalDeal.No();/ /考虑在这里指定时区。
期间=天数的期间(3);
LocalDate FinalExhilation=this.getExpirationDate().plus(gracePeriod);
布尔值isExpired=today.isAfter(最终版本);
返回i expired;
}
或者,更简单地说:

public boolean过期()
{
返回LocalDate.now().isAfter(this.getExpirationDate().plusDays(3));
}
用法:

if( ! foodItem.expired() ) { myList.add( foodItem ) ; }
警告:请注意,对于任何给定的时刻,全球各地的日期都因时区而异。现在是日本东京的“明天”,而加拿大多伦多的“昨天”。通过在调用
LocalDate.now
时省略
ZoneId
参数,您的结果将根据部署JVM的当前默认时区而有所不同。如注释中所建议的,考虑使用例如<代码> LoalDeal.现在(ZONID..(“美国/ NeXYYOK”))< /代码> ./P> 完整示例类 下面是一个使用该特性的示例类

package work.basil.demo;
导入java.time.LocalDate;
导入java.time.Month;
导入java.time.Period;
导入java.util.Objects;
公共记录FoodItem(字符串标签、双卷、双重量、LocalDate expirationDate、Period gracePeriod)
{
//构造器。
公共FoodItem(最终字符串标签、最终双卷、最终双重量、最终LocalDate到期日期、最终时段gracePeriod)
{
this.label=Objects.requirennull(标签);
this.volume=Objects.requirennull(体积);
this.weight=Objects.requirennoull(重量);
this.expirationDate=Objects.requirennull(expirationDate);
this.gracePeriod=Objects.requireNonNull(gracePeriod);
if(this.gracePeriod.isNegative()){抛出新的IllegalArgumentException(“宽限期必须为正值。消息35; f511c804-db04-4783-8329-3a8e928b98cf”);}
}
//计算值。
公共布尔值isExpired()
{
返回LocalDate.now().isAfter(this.expirationDate().plus(this.gracePeriod));
}
}
用法

FoodItem oats=新的FoodItem(“oats”,25d,0.500d,本地日期(2025年2月5日),期间(3日));
System.out.println(“oats=“+oats”);
System.out.println(“oats是否过期:+oats.isExpired());
跑步的时候

oats=FoodItem[标签=oats,体积=25.0,重量=0.5,有效期=2025-02-05,宽限期=P3D]
燕麦是否过期:假

我很确定您想要>=或>,而不是!=,有!=stillValid仅在到期前3天返回false,精确到毫秒。“现在我需要在addItem方法中使用此方法来检查商品的到期日期是否过期,我可以添加到商店。”@OhGodspeder如果检查为负数,则不包括数组中的项。@Martheen当我尝试使用
LocalDate
(或
isAfter
)的
isBefore
方法时。在我看来,这正是OP需要的答案,谢谢。值得一提的是,
isAfter
意味着严格意义上是在之后,因此该项目将从过期日期后的第4天开始报告过期。我在编辑@ArvindKumarAvinash(a)时故意使用了
US/Eastern
,不推荐使用。(b)
US/Eastern
不是“更一般的”-
US/Eastern
映射到
America/New\u York
。(c) 至于时区的重复,现在可能是这样,但不同的时区通常是由于过去或未来某个时刻的差异而创建的。有一些罕见的错误,比如
America/Montreal
,这些错误被认为是在某一点上出现了分歧,但实际上并没有。因此,现在有人反对,链接到
America/Toronto
@ArvindKumarAvinash“在美国,大多数人在谈论东海岸时间时都说“东部”——这是美国的一个问题