2016-05-30 2 views
0

質問は、2つのdates.example-input-26/3/2000と12/8/2014の間の日数を見つけることです。これらの2つの日付の間の日数は出力されません。
「識別子が必要です」と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

大文字で開始する必要があります。まず、メインメソッドでクラス変数を静的宣言したり、コンストラクタで初期化したりせずに呼び出すことになりました。次に、Scannerのオブジェクトからクラスのメソッドであるleap()を呼び出しています。それは不可能。プログラムはこのようにコンパイルも実行もしません。私はそれをコンパイル可能かつ実行可能にするためにあなたのコードを変更しました。しかし1つのことは確かです。その論理は間違っています。 2つの日付間の日数を計算したいので間違った出力を出しています。それがあなたの仕事です。私はそのエラーを取り除いた。今は走っています。ここでは、次のとおりです。 -

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

宣言と静的ブロックのみがメソッドから許可されます。以下の実行文が静的ブロック内でまたはSOコンストラクタ

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. 慣例によると、クラス名はあなたのプログラムがエラーの束である

関連する問題