2016-05-30 96 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. 根據慣例,類名應以大寫字母