2014-07-23 3 views
0

이번에는 더 구체적으로 시도해 보겠습니다.클래스의 인터페이스 반환 유형을 확인할 수 없습니다.

전체 아이디어 : 경과 인터페이스를 구현하는 날짜 클래스를 생성하는 데 필요한

  • .
  • 강사가 인터페이스를 제공했으나 여기에 사용자가 잘못 표시했습니다.
  • 강사는 도움이되지 않는 여름 수업을 거의 끝냅니다.

반환 형식 날짜를 부여 할 수 있도록 수업 날짜를 가져올 수 없습니다.

인터페이스 코드 :

public interface elapsed 
{ 
/* 
* a year can have 365 or 366 days 
* depending on "leap-year". 
* February can have 28 or 29 days 
* also depending on "leap-year" 
*/ 

public static final int days_week = 7; 
public static final int weeks_year = 52; 

//add any number of days to a date 
public date addDays (int d); 

//subtract any number of days from a day 
public date subDays (int d); 

} 

그래서 클래스 날짜는 subDays 및 addDays를 사용한다. 승인. 나는 정수 d에 대해 입력 된 값을 뒤집을 수 있고 같은 수학을 사용할 수 있기 때문에 subDays를 사용하지 않기로 결정했습니다. 나는 addDays 날짜를 반환하지만 난 그것을 할 또는 어떤 구문을 사용하는 방법을 알아낼 수없는 필요

public class date implements elapsed 
{ 

int day; 
int month; 
int year; 

public date (int Day, int Month, int Year) 
{ 
    day = Day; 
    month = Month; 
    year = Year; 
} 

public date() 
{ 

} 

public int getDay() 
{ 
    return day; 
} 

public int getMonth() 
{ 
    return month; 
} 

public int getYear() 
{ 
    return year; 
} 

public date addDays (int x) 
{ 
    int d = getDay(); 
    int m = getMonth(); 
    int y = getYear(); 

    m = (m + 9) % 12; 
    y = y - (m/10); 
    int g = (365 * y) + (y/4) - (y/100) + (y/400) + ((m * 306 + 5)/10) + (d - 1); 

    g = g + x; //adds days to the g variable which is the date from clock start 

    y = (10000 * g + 14780)/3652425; 
    int ddd = g - (365 * y + y/4 - y/100 + y/400); 

    if (ddd < 0) //manages the occurrences of leap years 
    { 
     y = y - 1; 
     ddd = g - (365*y + y/4 - y/100 + y/400); 
    } 

    int mi = (100 * ddd + 52)/3060; 
    int mm = (mi + 2) % 12 + 1; 
    y = y + (mi + 2)/12; 
    int dd = ddd - (mi * 306 + 5)/10 + 1; 

    return new date(dd, mm, y); 
} 

public date subDays (int x) 
{ 
    int d = getDay(); 
    int m = getMonth(); 
    int y = getYear(); 

    m = (m + 9) % 12; 
    y = y - (m/10); 
    int g = (365 * y) + (y/4) - (y/100) + (y/400) + ((m * 306 + 5)/10) + (d - 1); 

    g = g - x; //subtracts days to the g variable which is the date from clock start 

    y = (10000 * g + 14780)/3652425; 
    int ddd = g - (365 * y + y/4 - y/100 + y/400); 

    if (ddd < 0) //manages the occurrences of leap years 
    { 
     y = y - 1; 
     ddd = g - (365*y + y/4 - y/100 + y/400); 
    } 

    int mi = (100 * ddd + 52)/3060; 
    int mm = (mi + 2) % 12 + 1; 
    y = y + (mi + 2)/12; 
    int dd = ddd - (mi * 306 + 5)/10 + 1; 

    return new date(dd, mm, y);  
} 

public String toString(int day, int month, int year) // formats the date into something nicer 
{ 
    String formMonth = null; 

    switch(month) 
    { 
    case 1: 
     formMonth = "Jan"; 
     break; 
    case 2: 
     formMonth = "Feb"; 
     break; 
    case 3: 
     formMonth = "Mar"; 
     break; 
    case 4: 
     formMonth = "Apr"; 
     break; 
    case 5: 
     formMonth = "May"; 
     break; 
    case 6: 
     formMonth = "Jun"; 
     break; 
    case 7: 
     formMonth = "Jul"; 
     break; 
    case 8: 
     formMonth = "Aug"; 
     break; 
    case 9: 
     formMonth = "Sep"; 
     break; 
    case 10: 
     formMonth = "Oct"; 
     break; 
    case 11: 
     formMonth = "Nov"; 
     break; 
    case 12: 
     formMonth = "Dec"; 
     break; 
    default: 
     System.exit(0); 
    } 
    String formDate = day + formMonth + year; 
    return formDate; 
} 

} //class end brackets 

: 같은

그래서 내 수업 날짜가 보인다. 나는 인터페이스가 우리에게 적절하게 주어지지 않은 것처럼 느낀다. 그러나 나는 무엇을 알 수있다.

내 메인에 다음과 같은 것을 사용할 수 있도록 새 날짜를 렌더링하면됩니다. date d2 = d1.addDays (x);

토스트 링에 넣어서 멋지게 만들어야합니다.

이 질문의 의미가 있습니까?

도움 주셔서 감사합니다.

+1

제안 : 되세요 클래스 이름은 대문자로 - 허용 된 규칙이므로 코드를 더 쉽게 읽을 수 있습니다. 예 :'date' 대신에'Date'. –

+2

나는 당신이 올바른 길에 있다고 생각합니다. 그러나'date'는 메소드가 아니라 생성자라는 것을 기억하십시오. '이것을 돌려 놓으십시오. –

+0

@tobias_k 나는 그걸 또한 시도했으나 오류는 다음으로 바뀐다 : 리턴 타입은 경과 된 것과 호환되지 않는다. addDays (int) 오류입니다. 그것은 메소드의 리턴 라인에서 에러를 제거합니다. – Adam

답변

0

나는 여기에 묻고있는 것을 100 % 확신하지 못하기 때문에 이것이 야생의 추측과 비슷하지만 다소 확신합니다.

addDays 메서드에서 새 날짜를 만들고 반환하려고합니다. 현재 날짜의 데이터를 가져 와서 해당 날짜에 해당 값을 더한 다음 date 생성자를 호출하여 새 인스턴스를 반환합니다. 지금까지 올바른 방향으로 가고 있습니다! 유일한 문제는 생성자가 this.date(...)처럼 호출되는 인스턴스의 메서드는 아니지만 new date(...)처럼 호출되어야한다는 것입니다.

public date addDays (int x) { 
    int d = getDay(); 
    int m = getMonth(); 
    int y = getYear(); 

    // date adding logic, did not check, assuming to be correct 

    return new date(dd, mm, y); 
} 
0

당신은 addDays은() 날짜를 반환해야 할이 경우 것으로, 그럼 그냥 다음을 수행하십시오 또한

public date addDays(int x) 
{ 
    return new date(dd,mm,yy); 
} 

public String toString() 
{ 

} 
관련 문제