hdoj 2005(java) 第几天?

第几天?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
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 71
import 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:

程序代码:

    
    
  1. public class TestNew  
  2. {  
  3.      public static void main(String args[]) {  
  4.          int[] s ;  
  5.          int i ;  
  6.          s = new int[5] ;  
  7.          for(i = 0 ; i < 5 ; i++) {  
  8.              s[i] = i ;  
  9.          }  
  10.          for(i = 4 ; i >= 0 ; i--) {  
  11.              System.out.println("" + s[i]) ;  
  12.          }  
  13.      }   


初始化:

1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。
实例:


TestD.java(动态):

程序代码:

    
    
  1. public class TestD  
  2. {  
  3.      public static void main(String args[]) {  
  4.          int a[] ;  
  5.          a = new int[3] ;  
  6.          a[0] = 0 ;  
  7.          a[1] = 1 ;  
  8.          a[2] = 2 ;  
  9.          Date days[] ;  
  10.          days = new Date[3] ;  
  11.          days[0] = new Date(2008,4,5) ;  
  12.          days[1] = new Date(2008,2,31) ;  
  13.          days[2] = new Date(2008,4,4) ;  
  14.      }  
  15. }  
  16.  
  17. class Date  
  18. {  
  19.      int year,month,day ;  
  20.      Date(int year ,int month ,int day) {  
  21.          this.year = year ;  
  22.          this.month = month ;  
  23.          this.day = day ;  
  24.      }  
  25. }  
  26.  


TestS.java(静态):

程序代码:

    
    
  1. public class TestS     
  2. {     
  3.      public static void main(String args[]) {     
  4.          int a[] = {0,1,2} ;     
  5.          Time times [] = {new Time(19,42,42),new Time(1,23,54),new Time(5,3,2)} ;     
  6.      }     
  7. }     
  8.  
  9. class Time     
  10. {     
  11.      int hour,min,sec ;     
  12.      Time(int hour ,int min ,int sec) {     
  13.          this.hour = hour ;     
  14.          this.min = min ;     
  15.          this.sec = sec ;     
  16.      }     
  17. }    


TestDefault.java(默认):

程序代码:

    
    
  1. public class TestDefault     
  2. {     
  3.      public static void main(String args[]) {     
  4.          int a [] = new int [5] ;     
  5.          System.out.println("" + a[3]) ;     
  6.      }     
  7. }   


<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>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值