2014-10-01 3 views
1
import java.util.*; 
public class LeapYear 
{ 
    public static void main (String[]args) 
    { 
     Scanner scan= new Scanner (System.in); 
     System.out.println("Please enter in the year"); 
     int year=scan.nextInt(); 
     if (year % 4 ==0) 
     { 
      { 
       if (year % 100 ==0); 
       else 
        System.out.println("The year,"+year+",is a leap year!"); 
      } 
      if(year % 400==0) 
       System.out.println("The year, "+year+",is a leap year!"); 
     } 
     else 
      System.out.println("The year, "+year+",is not a leap year!"); 
    } 
} 

Эй, все! Выше мой код для программы високосного года. Кажется, он работает хорошо, за исключением случаев, когда я ввожу число, например 3000 или 300, JVM просто останавливается и закрывает окно терминала. Может ли кто-нибудь указать, почему он не принимает эти цифры (Также, пожалуйста, простите меня, что мой код не отформатирован должным образом - я новичок и стараюсь изо всех сил) ПРИМЕЧАНИЕ. Он отображает правильные ответы, когда Я тестирую 1900, 1996, 2004, 164 и 204 как годы. Он просто не примет 300 или 3000. Еще раз спасибо!Программа високосного года

+3

Совет, особенно при изучении Java, добавьте во все фигурные скобки после if-statements. Это значительно упростит, когда у вас есть пустые операторы if и где заканчиваются if-statements. – mdewitt

+0

Кажется, что вам нужно больше узнать о логических операторах, таких как '||' (или), '&&' (и), '!' (Not) или отношения типа '! =' (Не равные). Это позволит создавать выражения типа 'if (year% X == 0 || (year% Y == 0 && year% Z! = 0))' - попытаться выяснить, какие значения следует использовать вместо 'X '' Y' и 'Z', поэтому он решит вашу задачу. – Pshemo

+0

FYI: 'java.time.Year (2017) .isLeap()' –

ответ

1

Вы просили нас простить ваше форматирование, но это ваше форматирование, которое побуждает вас пропустить проблему. Особенно, когда вы впервые начинаете, вам будет очень полезно понять, что происходит, если вы очень прилежны в своем форматировании. Предложение: всегда включайте фигурные скобки, даже если они являются необязательными, и всегда предоставляют «else» часть каждого выражения «if». Таким образом:

if (condition) { 
    action; 
} else { 
    alternative action; 
} 

В вашем случае, вы будете видеть в ваших строках 11 и 12, где у вас есть syntacticly правильный код, но очень вероятно, не то, что вы имели в виду. Открывающая скобка на линии 11 кажется неуместной, а точка с запятой в конце строки 12 просто заменяет собой «действие», которое будет иметь место, если бы это условие было истинным.

if ((year % 4) == 0) { 
    // could be a leap year 
    if ((year % 100) == 0) { 
     // could be a leap year too 
     if ((year % 400) == 0) { 
      println("yes, this is a leap year ... divisible by 4, 100, AND 400"); 
     } else { 
      // not a leap year ... divisible by 4 and 100, but NOT 400 
     } 
    } else { 
     println("yes, this is a leap year ... it's divisible by 4 but not 100"); 
    } 
} else { 
    // absolutely not a leap year 
} 
3

проверить следующие строки:

if (year % 100 ==0); 
else 

300% 100 == 0, ничего не выводится.

1

Вы можете сделать ваш код более кратким, если вы сделаете это вместо:

if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { 
    System.out.println("The year,"+year+",is a leap year!"); 
} else { 
    System.out.println("The year, "+year+",is not a leap year!"); 
} 

Кроме того, обратите внимание, что эта формула для расчета високосных лет работает только в течение многих лет после того, как «1583».

+0

и IMO eaier для чтения. +1 –

Смежные вопросы