IF声明条件

时间:2012-07-25 05:59:29

标签: java

这是我的代码,我有一个简单的问题

import java.util.*;
import java.io.*;
import type.lib.GlobalCredit;
import type.lib.CreditCard;
import java.text.SimpleDateFormat;


public class eCheck08A

{
public static void main(String[] args)

{
    PrintStream out = System.out;
    Scanner in = new Scanner(System.in);

    GlobalCredit credit1 = new GlobalCredit().getRandom();

    out.print("Enter report range in years ... ");
    int range = in.nextInt();
    out.println("Cards expiring before " + range + " year(s) from now: ");

    SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy");

    for (CreditCard cc : credit1)
    {

    Calendar c = Calendar.getInstance();
    c.setTime(cc.getExpiryDate());
    c.add(Calendar.YEAR, range);
    Date newDate = c.getTime();

        if (cc.getExpiryDate().compareTo(newDate) < range)
        {
            if(cc.getExpiryDate().compareTo(newDate) > range)
            {
                out.print("*");
            }
            out.print(cc.getNumber());
            out.println("\t" + sf.format(cc.getExpiryDate()));

        }
    }



}
}

输出应该是什么样子:

Enter report range in years ... 3
Cards expiring before 3 years from now:

561561-8 20/11/2015
045645-7 22/02/2017
456462-3 16/04/2013 *
546548-5 19/08/2016

今年是2012年 该人输入'3'作为范围。 所以从2012年到2015年的任何一年都应该有一个“*”。与上面的输出一样,2013年有一个“*”。 你能否在我的IF声明中说出我做错了什么?

4 个答案:

答案 0 :(得分:1)

compareTo方法不会返回您期望的内容。只保证在第一个参数较小时返回负数,如果大于正数则返回正数,如果它们相等则返回零。

编辑:以下是您可以更改代码的方式:

Date now = new Date(System.currentTimeMillis());
Date endDate = new Date(now.getTime());
endDate.SetYear(endDate.getYear() + 3);
if (cc.getExpiryDate().after(now) && cc.ExpiryDate.before(endDate)) {
 // do stuff.
}

你必须小心处理边缘情况(如果你包括间隔的末尾等等),但这应该作为方法。

答案 1 :(得分:1)

如果您要将cc.getExpiryDate()当前日期+范围进行比较,则希望newDate为:

Calendar c = Calendar.getInstance();
// commenting this line out because getInstance() gives us the current date already
//    c.setTime(cc.getExpiryDate());
c.add(Calendar.YEAR, range);
Date newDate = c.getTime();

newDate比当前日期提前了几年。现在,您可以开始比较cc.getExpiryDate()值:

    // expiry date is BEFORE the date + "range" years ahead
    if (cc.getExpiryDate().compareTo(newDate) < 0)
    {
        // the expiry date is AFTER or ON the current date
        if(cc.getExpiryDate().compareTo(new Date()) >= 0)
        {
            out.print("*");
        }
    }
    out.print(cc.getNumber());
    out.println("\t" + sf.format(cc.getExpiryDate()));

答案 2 :(得分:1)

我认为你的整个逻辑都是关闭的。您应该根据today + nYears的日期而不是expiryDate + nYears来比较信用卡到期日期。

查看Date.afterDate.equalsDate.before

答案 3 :(得分:0)

查看Date.compareTo()方法的java文档...

返回: 如果参数Date等于此Date,则值为0;如果此Date在Date参数之前,则小于0的值;如果此Date位于Date参数之后,则值大于0.

但这并没有为您提供多年的差异。它只会给你-1,0或1。

作为一种解决方案,您需要从日期中提取年份,然后进行比较。