首先,我一直在寻找任何与我的问题相近但我找不到的东西。我不是一个非常优秀的程序员,我刚开始玩它一点,我对它的兴趣正在增长很多。
我在想是否可以使用基本且易于理解的语言制作一个基本程序,以及一个月和几天的“计算器”。
就像我有一个sysout打印文件说:Write month number
,我会输入11
,然后在月份写一个日期编号,有人写27
它会说日期正确!
但是,如果它问我一个月,我会输入6
,June
,然后我会在31
中写下它会打印的日期Month 6 doesn't have day 31
。
我想保持简单,所以我理解基本语言不是太难!我只是一个新手!
感谢您的帮助。
答案 0 :(得分:3)
如果你只想完成工作,我建议你去看看Calendar API或JodaTime。
如果您对学习更感兴趣如何自己动手,这里有一个方法的建议:
像
这样的数组硬编码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
答案 1 :(得分:1)
这个程序可以帮助你......
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);
}
}
答案 2 :(得分:0)
在Date类中,1月的第一个月是“0”,ZERO。所以你认为六月和你写6,但必须是5;如
January 0
February 1
March 2
April 3
May 4
June 5
答案 3 :(得分:0)
利用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");
}
}
}
您需要注意的是,当前日历 将1月视为0月。
答案 4 :(得分:0)
Month.of( 6 ).maxLength()
现代方法使用java.time类来取代麻烦的旧Date
/ Calendar
类。
使用Month
枚举。
Month month = Month.of( 6 ) ; // Months numbered sanely, 1-12 for January-December.
if( dayOfMonthInput > month.maxLength() ) {
… bad input
}
当然,2月份的最后一天取决于闰年。因此,如果您想要精确,则需要使用YearMonth
。
YearMonth ym = YearMonth.of( 2017 , 2 ) ;
if( dayOfMonthInput > ym.lengthOfMonth() ) {
… bad input
}
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。