2014-09-01 37 views
6
import java.util.Scanner; 

public class Hw2JamesVaughn { 
    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in);   
     System.out.print("Enter a year: "); 
     int year = input.nextInt(); 
     if((year < 1582) == (year % 4==0)) 
      System.out.println(year + " is a leap year"); 
     else 
      System.out.println(year + " is not a leap year"); 

     if((year > 1582) == (year % 100 != 0) || (year % 400 == 0)) 
      System.out.println(year + " is a leap year"); 
     else 
      System.out.println(year + " is not a leap year"); 

    }     
} 

Đây là nhiệm vụ.Các vấn đề về mã nhảy Java năm

(Để xác định xem một năm cụ thể là năm nhuận, sử dụng logic sau đây:

  • năm phải chia hết cho 4
  • bắt đầu từ năm 1582, nếu năm chia hết cho 100, nó cũng phải chia hết cho 400 Vì vậy, năm 1700 không phải là năm nhuận, nhưng năm 2000 là 1500. Năm 1500 là năm nhuận vì nó là trước năm 1582, năm nhận con nuôi của lịch Gregorian. , và sau đó hiển thị cho dù năm là năm nhuận hay không.)

Tôi đã nhận được điều này đến nay với chương trình năm nhuận java của tôi nhưng nó không hoạt động! Tôi đã làm việc về điều này và tôi không có ý tưởng gì là sai.

+6

Hãy nghĩ về điều kiện này: '(năm <1582) == (năm% 4 == 0)'. Hãy suy nghĩ * rất cẩn thận về những gì đang kiểm tra. Tôi không nghĩ đó là ý của bạn. (Gợi ý: Tôi chỉ tách riêng "mọi thứ trước năm 1582" từ "mọi thứ từ năm 1582 trở đi", và bỏ qua thực tế là hai nhánh đó sẽ có bất kỳ điểm gì chung ...) –

+0

Có lỗi cú pháp trong mã của bạn - một ' ; 'ngay sau câu lệnh' if', kết thúc khối 'if' không có phần thân. 'Else' sau bị bỏ lại không có' if' tương ứng. – papacito

+0

Tôi nghĩ rằng năm chia tách là 1752, không phải 1582 ... bạn có thể kiểm tra xem ?? nếu bạn đang ở dưới Linux, kiểm tra cal 1700 :)) Tôi không thể tư vấn cho các cửa sổ như tôi không có nó .. – mlwn

Trả lời

1

Thứ nhất, điều này if((year < 1582) == (year % 4==0)) kiểm tra sự bình đẳng boolean. Tôi nghĩ rằng bạn muốn có một if((year < 1582) && (year % 4==0)) nhưng tôi sợ rằng vẫn không sửa được logic của bạn.

Tôi khuyên bạn nên bắt đầu bằng cách tạo phương thức. Phần đầu tiên nên kiểm tra nếu year là ít hơn 1582. Nếu vậy, trả về true nếu đó là bội số của phần 4. Phần thứ hai được mô tả chi tiết trên Wikipedia here. Đưa nó cùng nhau đưa ra một cái gì đó như thế nào,

private static boolean isLeapYear(int year) { 
    if (year < 1582) { 
     return (year % 4 == 0); 
    } 
    /* 
    * Rest of algorithm from: http://en.wikipedia.org/wiki/Leap_year 
    */ 
    if (year % 4 != 0) { 
     /* 
     * if (year is not divisible by 4) then (it is a common year) 
     */ 
     return false; 
    } else if (year % 100 != 0) { 
     /* 
     * else if (year is not divisible by 100) then (it is a leap year) 
     */ 
     return true; 
    } 
    /* 
    * else if (year is not divisible by 400) then (it is a common year) 
    * else (it is a leap year) 
    */ 
    return (year % 400 == 0); 
} 

Sau đó, bạn có thể sử dụng printf để ra kết quả,

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter a year: "); 
    int year = input.nextInt(); 
    System.out.printf("%d %s leap year", year, isLeapYear(year) ? "is a" 
      : "is not a"); 
} 

Cuối cùng, mã ban đầu của bạn có thể được thực hiện như thế nào -

if (year < 1582 && year % 4 == 0) 
    System.out.println(year + " is a leap year"); 
else if (year < 1582) 
    System.out.println(year + " is not a leap year"); 
else if (year >= 1582 && (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))) 
    System.out.println(year + " is a leap year"); 
else 
    System.out.println(year + " is not a leap year"); 
1

Ngoài các thuật toán bạn có thể tính toán năm nhuận sử dụng java được xây dựng trong lịch api.

static boolean isLeapYear(int year){ 
    Calendar calendar= Calendar.getInstance(); 
    calendar.set(Calendar.YEAR,year); 
    return calendar.getActualMaximum(Calendar.DAY_OF_YEAR) > 365; 
} 
Các vấn đề liên quan