2016-05-30 142 views
0

问题是要找出两个日期之间的天数。例如输入26/3/2000和12/8/2014.输出将是这两个日期之间的天数。
有一个错误说“预期标识符”,i = 1突出显示。我不确定该程序是否完全正确。程序无法运行?

import java.util.*; 
class yearst 
{ 

    int a[]={0,31,28,31,30,31,30,31,30,31,30,31,30}; 

    int i,s,s1,s2,s3,k,diy,m,m1,m2,d1,d2,y1,y2,y; 

    i=1;s1=0;s2=0;s3=0;diy=365; 


     void leap(int y) 
     { 
     if(y%4==0 && y%100!=0 || y%400==0) //for leap year 
     { 
      a[2]=29; 
      diy=366; 
     } 
     else 
     { 
      a[2]=28; 
      diy=365; 

     } 
     } 


     public static void main(String args[]) 
     { 
     Scanner ob=new Scanner(System.in); 
     System.out.println("Enter the months,dates and years"); 
     m1=ob.nextInt(); 
     m2=ob.nextInt(); 
     d1=ob.nextInt(); 
     d2=ob.nextInt(); 
     y1=ob.nextInt(); 
     y2=ob.nextInt(); 
     for(i=y1;i<y2;i++) 
     { 
      ob.leap(i+1) 
      m=1*diy; 
      s1=s1+m; 
     } 

     for(i=1;i<m1;i++)//no of days left in y1 
     { 
      ob.leap(y1); 
      s2+=a[i]; 
     } 
     s2+=d1; 
     k=diy-s2; 
     for(i=1;i<m2;i++)//no of days passed 
     { 
      ob.leap(y2); 
      s3+=a[i]; 
     } 
     s3+=d2; 
     s=s1+s2+s3; 
     System.out.println("No of days in between"+s) 
    } 
} 

请帮忙。

回答

2

你的程序是一堆错误开始。首先,你在main方法中调用类变量而不声明它们是静态的,或者在构造函数中初始化它们。其次,您正在从Scanner的对象调用leap(),它是一个类的方法。这不可能。该程序将永远不会编译或以这种方式运行。我修改了您的代码以使其可编译并可运行。但有一点是肯定的。其逻辑不正确。由于您要计算两个日期之间的天数,因此它会输出错误的输出。那是你的工作。我删除了它的错误。现在它正在运行。在这里,您是: -

import java.util.*; 
class yearst 
{ 

    static int a[]={0,31,28,31,30,31,30,31,30,31,30,31,30}; 

    static int i=1,s,s1=0,s2=0,s3=0,k,diy=365,m,m1,m2,d1,d2,y1,y2,y; 

    static void leap(int y) 
     { 
     if(y%4==0 && y%100!=0 || y%400==0) //for leap year 
     { 
      a[2]=29; 
      diy=366; 
     } 
     else 
     { 
      a[2]=28; 
      diy=365; 

     } 
     } 


     public static void main(String args[]) 
     { 
      //i=1;s1=0;s2=0;s3=0;diy=365; 

     Scanner ob=new Scanner(System.in); 
     System.out.println("Enter the months,dates and years"); 
     m1=ob.nextInt(); 
     m2=ob.nextInt(); 
     d1=ob.nextInt(); 
     d2=ob.nextInt(); 
     y1=ob.nextInt(); 
     y2=ob.nextInt(); 
     for(i=y1;i<y2;i++) 
     { 
      leap(i+1); 
      m=1*diy; 
      s1=s1+m; 
     } 

     for(i=1;i<m1;i++)//no of days left in y1 
     { 
      leap(y1); 
      s2+=a[i]; 
     } 
     s2+=d1; 
     k=diy-s2; 
     for(i=1;i<m2;i++)//no of days passed 
     { 
      leap(y2); 
      s3+=a[i]; 
     } 
     s3+=d2; 
     s=s1+s2+s3; 
     System.out.println("No of days in between"+s); 
    } 
} 

一切顺利:)

+0

谢谢:D.我是一个可怜的程序员。 – Matix

0

只允许声明和静态块超出方法。下面的可执行语句必须在静态块或在构造函数中

int i=1,s1=0,s2=0,s3=0,diy=365; 

因此,我建议您将代码移到构造函数上面。

yearst(){ 
    i=1;s1=0;s2=0;s3=0;diy=365; 
} 
+0

我已经做到了,但现在的错误是“M1 = ob.nextInt(); - 非静态变量M1无法从引用一个静态的上下文“。 – Matix

0

有几件事情:

  1. 你需要初始化变量在构造函数中,作为一个类内部初始化不允许

  2. 你检查出Date在Java中的类?这可能对这种情况更有用。

  3. 根据惯例,类名应以大写字母