第几天?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 120906 Accepted Submission(s): 43862
Total Submission(s): 120906 Accepted Submission(s): 43862
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20 2006/3/12
Sample Output
20 71import java.util.*; import java.math.*; import java.io.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in =new Scanner(System.in); int m[] = new int[]{31,28,31,30,31,30,31,31,30,31,30,31};//数组初始化 while(in.hasNext()) { String s=in.nextLine();//定义一个字符串变量并输入它 String[] str = s.split("/");//把我们输入的字符串用/分开并存储在str数组中 int y=Integer.parseInt(str[0]);//将一个字符串转换成int型 int mon=Integer.parseInt(str[1]); int r=Integer.parseInt(str[2]); int a=0; if(y%4==0&&y%100!=0||y%400==0) { a=1; } int ans=0; for(int i=0;i<mon-1;i++) { ans=ans+m[i]; } ans=ans+r; if(a==1&&mon>2) { ans++; } System.out.println(ans); } } }觉得本题做的还是有一定难度的,把数组初始化复习了一下,又学习了split的用法,还要能够转义字符串,天呀!
有很多知识点,所以好多ACM招生用这一题,的确有他的价值
把知识点粘一下吧!
闰年口诀:四年一闰,百年不闰,400年一闰;
数组初始化
一维数组的声明方式:
type var[]; 或type[] var;声明数组时不能指定其长度(数组中元素的个数),
Java中使用关键字new创建数组对象,格式为:
数组名 = new 数组元素的类型 [数组元素的个数]实例:
TestNew.java:程序代码:
- public class TestNew
- {
- public static void main(String args[]) {
- int[] s ;
- int i ;
- s = new int[5] ;
- for(i = 0 ; i < 5 ; i++) {
- s[i] = i ;
- }
- for(i = 4 ; i >= 0 ; i--) {
- System.out.println("" + s[i]) ;
- }
- }
- }
初始化:1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。
实例:
TestD.java(动态):程序代码:
- public class TestD
- {
- public static void main(String args[]) {
- int a[] ;
- a = new int[3] ;
- a[0] = 0 ;
- a[1] = 1 ;
- a[2] = 2 ;
- Date days[] ;
- days = new Date[3] ;
- days[0] = new Date(2008,4,5) ;
- days[1] = new Date(2008,2,31) ;
- days[2] = new Date(2008,4,4) ;
- }
- }
- class Date
- {
- int year,month,day ;
- Date(int year ,int month ,int day) {
- this.year = year ;
- this.month = month ;
- this.day = day ;
- }
- }
TestS.java(静态):程序代码:
- public class TestS
- {
- public static void main(String args[]) {
- int a[] = {0,1,2} ;
- Time times [] = {new Time(19,42,42),new Time(1,23,54),new Time(5,3,2)} ;
- }
- }
- class Time
- {
- int hour,min,sec ;
- Time(int hour ,int min ,int sec) {
- this.hour = hour ;
- this.min = min ;
- this.sec = sec ;
- }
- }
TestDefault.java(默认):程序代码:
- public class TestDefault
- {
- public static void main(String args[]) {
- int a [] = new int [5] ;
- System.out.println("" + a[3]) ;
- }
- }
<span style="color:#FF0000;"><span style="font-size:18px;">Java String.split()用法小结 </span>在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1、如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 2、如果用“|”作为分隔的话,必须是如下写法,String.split("\\|"),这样才能正确的分隔开,不能用String.split("|"); “.”和“|”都是转义字符,必须得加"\\"; 3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如,“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split("and|or"); 使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。 我们看jdk doc中说明 public String[] split(String regex) Splits this string around matches of the given regular expression. 参数regex是一个 regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果,比如测试下面的代码用竖线 | 分隔字符串,你将得不到预期的结果 复制代码 String[] aa = "aaa|bbb|ccc".split("|"); //String[] aa = "aaa|bbb|ccc".split("\\|"); 这样才能得到正确的结果 for (int i = 0 ; i <aa.length ; i++ ) { System.out.println("--"+aa[i]); } 复制代码 用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。 复制代码 String[] aa = "aaa*bbb*ccc".split("*"); //String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果 for (int i = 0 ; i <aa.length ; i++ ) { System.out.println("--"+aa[i]); } 复制代码 显然, + * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后即可得到正确的结果。 "|" 分隔串时虽然能够执行,但是却不是预期的目的,"\\|"转义后即可得到正确的结果。 还有如果想在串中使用"\"字符,则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果, String[] aa = "aaa\\bbb\\bccc".split("\\\\"); </span>