Java-月和天?

Java-月和天?,java,time,Java,Time,首先,我一直在寻找任何接近我的问题,但我找不到任何东西。我不是一个很好的程序员,我刚刚开始玩它一点,我对它的兴趣正在增长很多 我在想,如果我能用简单易懂的语言编写一个basic程序,用一个月和一天的“计算器” 比如,如果我有一个系统输出,上面写着:Write month number,我会输入11,然后在月份中写一个日数,有人写27,它会说日期正确 但是,如果它问我月份,我会键入6,如June,然后我写31,如它将打印的天数,即第6个月没有第31天 我想保持它的简单,这样我就可以像基本语言一样理

首先,我一直在寻找任何接近我的问题,但我找不到任何东西。我不是一个很好的程序员,我刚刚开始玩它一点,我对它的兴趣正在增长很多

我在想,如果我能用简单易懂的语言编写一个basic程序,用一个月和一天的“计算器”

比如,如果我有一个系统输出,上面写着:
Write month number
,我会输入
11
,然后在月份中写一个日数,有人写
27
,它会说日期正确

但是,如果它问我月份,我会键入
6
,如
June
,然后我写
31
,如它将打印的天数,即
第6个月没有第31天

我想保持它的简单,这样我就可以像基本语言一样理解它,而不是太难!我只是个新手


谢谢大家的帮助。

在日期课上,一月的第一个月是“0”,零。所以你认为六月和你写6,但一定是5;作为

January 0
February 1
March 2
April 3
May 4
June 5

如果你只是想完成这项工作,我建议你去看一看,或者也许

如果你对自己学习如何做更感兴趣,这里有一个方法建议:

硬编码数组,如

int[] daysInMonths = { 31, 27, 31, ... };
然后使用以下内容进行检查:

// Get month and day from user
Scanner s = new Scanner(System.in);
int month = s.nextInt();
int day = s.nextInt();

int monthIndex = month - 1;     // since array indices are 0-based

if (1 <= day && day <= daysInMonths[monthIndex])
    print ok
else
    print does not exist
//从用户处获取月份和日期
扫描仪s=新的扫描仪(System.in);
整月=s.nextInt();
int day=s.nextInt();
int monthIndex=月份-1;//因为数组索引是基于0的

if(1利用Calendar类的功能是一种更好的方法

    int day = 31;
    int month = 6; // JULY

    Calendar calendar = Calendar.getInstance();
    if(month < calendar.getActualMinimum(Calendar.MONTH) 
            || month > calendar.getActualMaximum(Calendar.MONTH))
        System.out.println("Error - invalid month");
    else 
    {
        calendar.set(Calendar.MONTH, month);
        if (day <  calendar.getActualMinimum(Calendar.DAY_OF_MONTH) 
                || day > calendar.getActualMaximum(Calendar.DAY_OF_MONTH))
        {
            System.out.println("Error - invalid day for month");
        }
        else
        {
            System.out.println("Date is correct");
        }
    }
}
int-day=31;
整月=6;//七月
日历=Calendar.getInstance();
如果(月<日历.getActualMinimum(日历.月)
||月>日历.获取实际最大值(日历.月))
System.out.println(“错误-无效月份”);
其他的
{
calendar.set(calendar.MONTH,MONTH);
如果(天<日历.获取实际最小值(日历.月的第天)
||day>calendar.getActualMaximum(calendar.day\u OF_MONTH))
{
System.out.println(“错误-月份无效日”);
}
其他的
{
System.out.println(“日期正确”);
}
}
}

您需要注意的是,日历当前将1月视为0月。

此程序应该可以让您继续

import java.util.*;

class Date {
    public static void main(String[] args) {
        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        System.out.print("Enter a month number and a day number (separate using \';\':_");
        Scanner sc = new Scanner(System.in).useDelimiter(";");
        int month = sc.nextInt();
        int day = sc.nextInt();
        sc.close();
        System.out.println((day == days[month - 1]) ? "Date correct!" : "Date incorrect: Month " + month + " does not have day " + day);
    }
}
太长,读不下去了 java.time 现代方法使用java.time类来取代麻烦的旧
Date
/
Calendar

使用枚举

当然,二月的最后一天取决于闰年。因此,如果你想精确,你需要使用


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目用额外的类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可能会在这里找到一些有用的类,如、、。

对不起,伙计,我受不了所有这些编辑过的打字错误。哈哈!感谢您的修复,我已经研究了一段时间如何编写这个程序了现在,我似乎失去了打字的能力。这是我编写的代码,我知道它很糟糕。公共类Date{public static void main(String[]args){System.out.println(“write in month number:”);int month;month=7;if(month 12){}System.out.println(“month”“没有这样的日子”);}}}}}}如果做实际工作而不是做家庭作业或练习,要知道这种行为主要是在enum中实现的。我也是。它总是让人困惑……现在我们有了日历,这使一切变得更简单,也更复杂和困惑:)记住这一点很重要,但用户仍然可以在6月份输入
6
,必须由程序将其转换为正确的内部数字。我建议将BufferedReader更改为Scanner。@Aoobe OK,但是否有具体原因?行越短,可读性越好,1行而不是9行(!)感谢阅读整数。感谢大家的回复,我很惭愧我仍然不懂基本知识。我正在尝试运行你的代码,但我似乎无法让它正常运行。你的课程日期,是不是应该更改,因为我的类名不同,并且我在某些行中出现错误,你能尝试运行它吗?再次感谢你你的时间。@Sebastian哪些行导致了错误?我运行了它,没有得到任何错误。
Month.of( 6 ).maxLength()
Month month = Month.of( 6 ) ;  // Months numbered sanely, 1-12 for January-December.
if( dayOfMonthInput > month.maxLength() ) {
    … bad input
}
YearMonth ym = YearMonth.of( 2017 , 2 ) ;
if( dayOfMonthInput > ym.lengthOfMonth() ) {
    … bad input
}