質問: java初心者です。 うるう年かどうかを出力するコードを作ったのですがうるう年でも、うるう年と出力できず、「うるう年ではない」となります。 こちらの問題点がわからないので教えていただけないでしょうか。 うるう年であると出力する条件式のところがなにかおかしいまではわかるのですが解決策が思い浮かびません。 お手数ですが改善策をよろしくお願いします。 問題のコード import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; //西暦が4で割り切れる年は閏年である。 //ただし、100で割り切れる年は閏年ではない。 //ただし、400で割り切れる年は閏年である。 public class Uru_year { public static void main(String[]args)throws IOException{ System.out.println("西暦で年号を入力してください"); BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); try{ String num=br.readLine(); int year=Integer.parseInt(num); if(year<1898){ System.out.println(year+"年は日本がまだ閏年を考えた暦を採用していません。wiki参照。"); }else if(year%4==0 && year%400==0 && year%100!=0){ System.out.println(year+"年は閏年です。"); }else if(year%4==0 && year%400==0 && year%100==0){ System.out.println(year+"年は閏年ではありません"); }else if(year>2100&&year<2999){ System.out.println(year+"年はあまり現実的ではありません。"); }else{ System.out.println(year+"年は閏年ではありません"); } } catch(NumberFormatException e){ System.out.println(e); System.out.println("数字が入力されていません。"); } } }
回答: うるう年だと判定する部分がここですが、 ``` else if(year%4==0 && year%400==0 && year%100!=0) ``` 「4で割り切れ、かつ400で割り切れ、かつ100で割り切れない」 という数は存在しません。400で割り切れれば必ず100で割り切れるので。 なので、「4で割り切れる」の中で場合分けが必要になります。 ``` if (year % 4 == 0) { if (year % 400 == 0 || year % 100 != 0) { //うるう年 } else{ //平年 } } ```