IF语句条件
这是我的代码,我有一个简单的问题,它应该是什么样子IF语句条件
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声明中做错了吗?
如果你是比较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()));
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.
}
你将不得不小心处理边缘情形(你应该包括和区间的两端等),但这应该做为方法。
啧啧,我们在这里试图不告诉他答案;) – MadProgrammer 2012-07-25 06:14:14
@MadProgrammer我通常避免只把答案告诉给家庭作业。这似乎是人们必须在工作中完成的完全有效的任务。如果我对某些语言没有经验,但我需要知道如何处理它,我宁愿得到一个答案而不是小费,因为理解小费可能需要更长的时间,然后自己提出一个解决方案。 – 2012-07-25 06:18:10
干草,这里没有问题,但学习如何解决问题的最好方法之一是先从一点开始,看看它在哪里。 JMO – MadProgrammer 2012-07-25 06:32:09
我觉得你的整个逻辑是关闭的。您应该根据日期today + nYears
而不是expiryDate + nYears
比较信用卡到期日。
看看Date.after
,Date.equals
,Date.before
看Date.compareTo()方法的Java文档...
返回: 值0,如果该参数日期等于这个日期;如果此日期在Date参数之前,则值小于0;如果此Date在Date参数之后,则值大于0。
但是这并不能为您提供几年的差异。它会给你只有-1,0或1.
作为一个解决方案,你需要提取一年的日期,然后进行比较。
检查['Date.compareTo']的javadocs(http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#compareTo%28java.util.Date% 29),它不能保证是>或或 2012-07-25 06:04:07
我是* sooo *添加[tag:homework]标签... – Bohemian 2012-07-25 06:13:12
我们是否有类似的问题几天之前? – MadProgrammer 2012-07-25 06:32:47