【问题标题】:How can I compare dates with 3 x primitive int dd mm yyyy?如何将日期与 3 x 原始 int dd mm yyyy 进行比较?
【发布时间】:2018-07-31 21:39:15
【问题描述】:

我有一个 Java 作业,但一个条件是我必须使用 3 int dd mm yyyy 将日期与另一个 3 int ddd mmm yyyy 进行比较。 我必须检查某人的生日是否早于 1950 年 10 月 15 日,但如果他的 BD 晚于,则需要检查是否在 1950 年 10 月 15 日至 1975 年 10 月 16 日之间。如果是,则继续主要条件和内容,如果不是,则退出.如果他的 BD 年龄较大,则继续进行主要条件。 我不能使用方法或数组,不能调用类,只能比较原始 Int...

int bddd = kb.nextInt(); 
int bdmm = kb.nextInt(); 
int bdyyyy = kb.nextInt();

//how do I check dates with int?? 
if(bdyyyy<=1975 && bdmm<=10 && bddd<=15) {
  int ddd = kb.nextInt(); 
  int mmm = kb.nextInt(); 
  int yyy = kb.nextInt();

  if(yyy>1950||(yyy>=1950 && mmm<=10 && ddd<=16)){
        // do another date check,
           if(//date check true) {
               //  go back to main stuff
           else
              System.out.println //end my misery


// main stuffs

                           
}

【问题讨论】:

  • 正常的解决方案是使用标准的LocalDate 类。有什么东西阻止你这样做吗?问是因为这听起来像是家庭作业,而家庭作业有时会有有趣的不自然的限制。
  • 至少,人们通常会编写一个比较两个日期的方法。为什么不能使用方法?
  • 目前还不清楚在每种情况下您必须做什么。可能存在三种情况:1950 年之前、1950 年至 1975 年之间以及 1975 年之后。
  • 你会用数学吗?就像求和和乘法一样。

标签: java date integer


【解决方案1】:

我会给你第一个 IF 的代码。你应该在第二个中做类似的事情。

如果你会使用数学,那就容易多了:

if (bdyyyy * 10000 + bdmm * 100 + bddd < 19751015) {

但如果你做不到,你必须:

if (
    (bdyyyy < 1975) ||
    (bdyyyy == 1975 && bdmm < 10) ||
    (bdyyyy == 1975 && bdmm == 10 && bddd < 15)
   ) {

这也可以简化一点,

if (
    (bdyyyy < 1975) ||
    (bdyyyy == 1975 && (
         bdmm < 10 ||
         (bdmm == 10 && bddd < 15)
    )
   ) {

【讨论】:

  • 更简单?也许更容易编写,而不是更容易阅读,这在编程中很重要。此外,OP 会从自己编写具体代码中学到更多。
  • 谢谢拉斐尔!数学真棒!我用它来简化比较,希望我不会受到惩罚。
【解决方案2】:

这是一种方法,虽然可能不是你的任务所期望的:

int compare = Arrays.compare(new int[] {bdyyyy, bdmm, bddd}, new int[] {1950, 10, 15});
if (compare > 0) {
    // It's after that date.
    compare = Arrays.compare(new int[] {bdyyyy, bdmm, bddd}, new int[] {1975, 10, 15});
    if (compare < 0) {
        // It's before this date.
    }
}

【讨论】:

  • 感谢狡猾!我不能使用数组,我只能使用 if、else if、switch、没有方法、没有数组、没有类。做任务非常严格。
【解决方案3】:

我相信你的话:你想先与 1950 年 10 月 15 日进行比较。有几种情况需要考虑。首先查看年份是在 1950 年之前、等于 1950 年还是在 1950 年之后。如果在之前或之后,您知道出生日期在哪里。如果是 1950 年(仅在这种情况下),您需要查看月份。再次,在十月之前,等于还是之后?之前和之后是简单的情况。如果是 10 月,您还需要考虑月份中的哪一天。

您可以用&amp;&amp;|| 和圆括号将其全部放入一个长if 条件中。或者您可能更喜欢将其拆分为多个 if 语句。再说一次,因为在比较之后你需要继续下一个比较,这可能是为了训练你编写复杂的条件,这样你就可以在两个(复杂的)if 语句中进行两次比较。如果你不能让它工作,你的救援可能会将第一次比较的最终结果分配给一个布尔变量,isEarlierThan15Oct1950,如果你像我一样喜欢解释变量名称。

根据具体数据进行思考通常更容易。因此,这里有一些示例日期,您可以在思考工作中使用它们,也可以用于测试代码。以下日期都早于 1950 年 10 月 15 日,您的程序应该能够分辨出来:

  • 1950 年 10 月 14 日(在您的程序中输入 14 10 1950
  • 1950 年 9 月 30 日
  • 1949 年 12 月 31 日

同样,您的程序必须能够看到以下日期晚于 1950 年 10 月 15 日:

  • 1950 年 10 月 16 日
  • 1950 年 11 月 1 日
  • 1951 年 1 月 1 日

【讨论】:

  • 感谢 Ole 的详细说明!我必须只使用 int 来比较日期,并且不确定如何使用 int string int。所以必须把所有的东西都放在一个长的 if 条件..
  • 几个月来我都没有打算使用字符串,我只是想以更易于阅读的方式给出建议的日期。您应该在程序中输入 1950 年 10 月 14 日,如 14 10 1950 等。
猜你喜欢
  • 2010-09-22
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多