站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题请java高手,来帮我解决一下这个问题!一定结帖.

请java高手,来帮我解决一下这个问题!一定结帖.

摘要: 请java高手,来帮我解决一下这个问题!一定结帖.


NextDate函数的设计、实现和测试
函数有3个参数:月份、日期和年;它们都具有整数值,且满足以下条件:
1-#60;=月份-#60;=12
1-#60;=日期-#60;=31
1812-#60;=年-#60;=2012
函数返回输入日期之后的那个日期;如果输入无效值,如2000年6月31日,输出指示相应变量超出取值范围;对于无效的日月年组合,如“1999年13月32日”输出“无效输入日期”。



普通校验+日期类


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class CSDN1 {

private static String nextDate(int year,int month,int day)
{
String strYear = Integer.toString(year);
String strMonth = Integer.toString(month);
String strDay = Integer.toString(day);
if(year -#60; 1812 || year -#62; 2012)
{
System.out.println(-#34;Wrong Year-#34;);
return -#34;Error-#34;;
}

if(month -#60; 1 || month -#62; 12)
{
System.out.println(-#34;Wrong mont-#34;);
return -#34;Error-#34;;
}
if(day -#60; 1 || day -#62; 31)
{
System.out.println(-#34;Wrong mont-#34;);
return -#34;Error-#34;;
}
String time = strYear+strMonth + strDay;
DateFormat df = new SimpleDateFormat(-#34;yyyyMMdd-#34;);
Calendar cal = Calendar.getInstance();
try {
cal.setTime(df.parse(time));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cal.add(Calendar.DATE, 1);// 月份加1
return df.format(cal.getTime()).toString();
}
public static void main(String[] args) {
String strtime= nextDate(2002,10,25);
System.out.println(strtime);
}
}



import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class CSDN1 {

private static String nextDate(int year,int month,int day)
{
String strYear = Integer.toString(year);
String strMonth = Integer.toString(month);
String strDay = Integer.toString(day);
if(year -#60; 1812 || year -#62; 2012)
{
System.out.println(-#34;Wrong Year-#34;);
return -#34;Error-#34;;
}

if(month -#60; 1 || month -#62; 12)
{
System.out.println(-#34;Wrong mont-#34;);
return -#34;Error-#34;;
}
if(day -#60; 1 || day -#62; 31)
{
System.out.println(-#34;Wrong mont-#34;);
return -#34;Error-#34;;
}
String time = strYear+strMonth + strDay;
DateFormat df = new SimpleDateFormat(-#34;yyyyMMdd-#34;);
Calendar cal = Calendar.getInstance();
try {
cal.setTime(df.parse(time));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cal.add(Calendar.DATE, 1);// 日期加1
return df.format(cal.getTime()).toString();
}
public static void main(String[] args) {
String strtime= nextDate(2002,10,25);
System.out.println(strtime);
}
}


此题不错,正在研究中……


路过


不知道我写的是否符合要求
class test{
private static String nextDate(int year,int month,int day)
{
String strYear = Integer.toString(year);
String strMonth = Integer.toString(month);
String strDay = Integer.toString(day);
if(year -#60; 1812 || year -#62; 2012)
{
System.out.println(-#34;无效输入日期-#34;);
return -#34;Error-#34;;
}

if(month -#60; 1 || month -#62; 12)
{
System.out.println(-#34;无效输入日期-#34;);
return -#34;Error-#34;;
}
if(day -#60; 1 || day -#62; 31)
{
System.out.println(-#34;无效输入日期-#34;);
return -#34;Error-#34;;
}
final int[] checkdate={31,28,31,30,31,30,31,31,30,31,30,31};
if((day==29)-#38;-#38;(month==2)-#38;-#38;(((year%4==0)-#38;-#38;(year%100!=0))||(year%400==0)))
{
return strYear+-#34;年-#34;+strMonth+-#34;月-#34;+strDay+-#34;日-#34;;
}
else
{
if(day-#60;=checkdate[month-1])

return strYear+-#34;年-#34;+strMonth+-#34;月-#34;+strDay+-#34;日-#34;;
else
return -#34;相应变量超出取值范围-#34;;
}

}
public static void main(String[] args) {
String strtime= nextDate(2000,2,29);
System.out.println(strtime);
}
}

有错误的地方,希望大家指正!


楼上的,不能正确读出下一天的日期.


谢谢指正,我没有注意题目要求,以为只是要判断日期呢,呵呵,粗心大意!


mark!!



路过


import java.text.*;
import java.util.*;
class datetest{
private static String nextDate(int year,int month,int day){
if(year -#60;1812 || year -#62; 2012 || month -#60; 1 || month -#62; 12 ||day -#60; 1 || day -#62; 31){
return -#34;无效输入日期-#34;;
}
String stryear,strmonth,strday;
stryear = Integer.toString(year);
if(month-#60;10)
strmonth = -#34;0-#34;+Integer.toString(month);
else
strmonth = Integer.toString(month);
if(day-#60;10)
strday = -#34;0-#34;+Integer.toString(day);
else
strday = Integer.toString(day);

String strtime = stryear + strmonth + strday;
DateFormat df = new SimpleDateFormat(-#34;yyyyMMdd-#34;);
Calendar cal = Calendar.getInstance();
try{
Date dt = df.parse(strtime);
if(!strtime.equals(df.format(dt)))
return -#34;相应变量超出取值范围-#34;;
cal.setTime(df.parse(strtime));
}catch(ParseException e){
e.printStackTrace();
}
cal.add(Calendar.DATE, 1);
return df.format(cal.getTime()).toString();
}
public static void main(String[] args) {
System.out.println(nextDate(2002,2,28));
}
}
应该可以了,可能有更优化的方法。


花了两分钟,把寂寞浪子的程序改了改,应该解决问题了!但是看起来很笨,其实小鱼的方法挺好的,大家花时间看看吧
class test{
private static String nextDate(int year,int month,int day)
{
String strYear = Integer.toString(year);
String strMonth = Integer.toString(month);
String strDay = Integer.toString(day);
if(year -#60; 1812 || year -#62; 2012)
{
System.out.println(-#34;无效输入日期-#34;);
return -#34;Error-#34;;
}

if(month -#60; 1 || month -#62; 12)
{
System.out.println(-#34;无效输入日期-#34;);
return -#34;Error-#34;;
}
if(day -#60; 1 || day -#62; 31)
{
System.out.println(-#34;无效输入日期-#34;);
return -#34;Error-#34;;
}
final int[] checkdate={31,28,31,30,31,30,31,31,30,31,30,31};
if((day==28)-#38;-#38;(month==2)-#38;-#38;(((year%4==0)-#38;-#38;(year%100!=0))||(year%400==0)))
{
return strYear+-#34;年-#34;+-#34;2月-#34;+-#34;29日-#34;;
}
else if((day==29)-#38;-#38;(month==2)-#38;-#38;(((year%4==0)-#38;-#38;(year%100!=0))||(year%400==0)))
{
return strYear+-#34;年-#34;+-#34;3月-#34;+-#34;1日-#34;;
}
else if((day == 31)-#38;-#38;(month == 12))
{
return Integer.toString(year+1) + -#34;年-#34; + -#34;1月1日-#34;;
}
else
{
if(day-#60;=checkdate[month-1])
{
if(day + 1 -#62; checkdate[month-1])
return strYear+-#34;年-#34;+Integer.toString(month+1)+-#34;月-#34;+-#34;1日-#34;;
else
return strYear+-#34;年-#34;+ strMonth +-#34;月-#34;+ Integer.toString(day+1)+-#34;日-#34;;
}

else
return -#34;相应变量超出取值范围-#34;;
}

}
public static void main(String[] args) {
String strtime= nextDate(2001,2,28);
System.out.println(strtime);
}
}



张华的程序解决了小鱼的错,给个位数的月份前加0,


开始没有看清上面小鱼的程序,更没有注意题目的第一个要求,误以为只是要判断这个日期是否符合要求就行了,所以只是想到数组进行简单的处理,下次回答问题前一定仔细看题目要求!


我借花献佛,把楼上程序完善了一下!还请多多包涵.

import java.text.*;
import java.util.*;
class datetest1{
private static String nextDate(int year,int month,int day){
if(year -#60;1812 || year -#62; 2012 || month -#60; 1 || month -#62; 12 ||day -#60; 1 || day -#62; 31){
return -#34;无效输入日期-#34;;
}
String stryear,strmonth,strday;
stryear = Integer.toString(year);
if(month-#60;10)
strmonth = -#34;0-#34;+Integer.toString(month);
else
strmonth = Integer.toString(month);
if(day-#60;10)
strday = -#34;0-#34;+Integer.toString(day);
else
strday = Integer.toString(day);
System.out.println(-#34;你输入的当前日期是:-#34;+stryear+strmonth+strday);
String strtime = stryear + strmonth + strday;
DateFormat df = new SimpleDateFormat(-#34;yyyyMMdd-#34;);
Calendar cal = Calendar.getInstance();
try{
Date dt = df.parse(strtime);
if(!strtime.equals(df.format(dt)))
return -#34;相应变量超出取值范围-#34;;
cal.setTime(df.parse(strtime));
}
catch(ParseException e){
e.printStackTrace();
}
cal.add(Calendar.DATE, 1);
return df.format(cal.getTime()).toString();
}
public static void main(String[] args) {
int year=Integer.parseInt(args[0]);
int month=Integer.parseInt(args[1]);
int date=Integer.parseInt(args[2]);
String strtime= nextDate(year,month,date);
System.out.println(-#34;下一天的日期是:-#34;+strtime);
//System.out.println(nextDate(2002,2,28));
}
}



多谢各位!已结帖子
正对程序测试中……



JAVA没有日期函数,这个也要自己写?

插播一条广告,小店新开张,优惠出售各种手工艺品,欢迎大家选购,是各位帅哥送女朋友、老婆、情人(OR各位美女送男朋友、老公、情人)的不二选择
http://shop33881320.taobao.com/


列现成的几个方法吧,代码将大大缩短

GregorianCalendar类里

1.boolean isLeapYear(int year)
确定给定的年份是否为闰年。

2.getActualMaximum(int field)
返回此日历字段可能具有的最大值。
例如:某年某月,最多有多少天

3.getGreatestMinimum(int field)
返回此 GregorianCalendar 实例给定日历字段的最高的最小值。

4.加1天用 GregorianCalendar类的add()方法
如:date.add(GregorianCalendar.DATE,1)




↑返回目录
前一篇: 请帮忙翻译一句话,是java-tutorial中的
后一篇: 刚入门者的上机题,在异常方面有些问题,请大家指教