2016-10-25 3 views
0
import javax.swing.JOptionPane; 
int year; 
boolean is_leap_year(int year) 
{ 
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) 
    return true; 
else 
    return false; 
} 

void setup() 
{ 
String answer = JOptionPane.showInputDialog("Enter a year or a negative number to test"); 
year = Integer.parseInt(answer); 

while (year > 0) { 
boolean b = is_leap_year(year); 
if (b == true) { 
println(year + " is a leap year"); 
} 
else{ 
println(year + " is Not a leap year"); 
answer = JOptionPane.showInputDialog("Enter a year or a negative number to test"); 
year = Integer.parseInt(answer); 
} 
} 
} 

나는 입력이 윤년인지 테스트하기 위해 is_leap_year 함수를 작성했습니다. 그러나 프로그램은 하나의 오류를 기준으로 실행되지 않습니다.설정에서 처리중인 함수 호출

(3 행) "이 메서드는 부울 값 형식의 결과를 반환해야합니다."

헤더에 함수 유형으로 부울을 넣었으므로 이미 작성하지 않았습니까? 또한 if 문 블록으로 true를 반환합니다.

또한이 함수를 설치 프로그램에서 제대로 호출 할 수 있는지 확실하지 않습니다. 나는 뭔가를 놓친 것처럼 느낍니다.

임의의 설명이 이해 될 것이다.

편집 : (7 번째 줄과 8 번째 줄) 편집을 완료하고 else를 추가하여 false를 반환했습니다. 어떤 이유로 2000을 입력 할 때 "2000 년 윤년입니다"를 여러 줄에 인쇄 한 후 처리가 충돌합니다. 무한 루프가 진행되고 있습니까? 어떻게 수정해야합니까?

+0

비 - 윤년에 대해 귀사의 방법은 어떤 가치를 반환합니까? –

+0

와우, 나는 그것을 완전히 잊었다. 추측 내가 else() false를 반환해야 쓸 수 있습니다. –

+0

@ PM77-1 안녕하세요, 나는 거짓을 반환하는 else 문을 넣었지만 여러 줄을 인쇄 한 후 처리가 중단되었습니다. 어떤 종류의 무한 루프가 있습니까? –

답변

0

귀하의 프로그램을 통해 머리 위로 또는 종이와 연필로 프로그램을 실행하십시오. 한 번에 한 줄씩 가져 가십시오.

String answer = JOptionPane.showInputDialog("Enter a year or a negative number to test"); 
    year = Integer.parseInt(answer); 

이 줄은 사용자로부터 일 년이됩니다. 사용자가 2000을 입력했다고 가정 해 보겠습니다.

while (year > 0) { 

이제 루핑을합니다. 2000 > 0이므로 while 루프를 입력합니다.

boolean b = is_leap_year(year); 

이 입력란은 윤년인지 테스트합니다. 2000은 윤년이므로 btrue입니다. btrue 때문에

if (b == true) { 
     println(year + " is a leap year"); 
} 

,이 인쇄됩니다.

else { 
     println(year + " is Not a leap year"); 
     answer = JOptionPane.showInputDialog("Enter a year or a negative number to test"); 
     year = Integer.parseInt(answer); 
    } 

우리 b 변수는 너무 이 코드는를 건너, 여전히 true입니다. 그런 다음 while 루프로 돌아갑니다.

while (year > 0) { 

우리 year 변수는 여전히 2000, 그래서 우리는 단지 또 다시 위의 반복, 다시합니다.

문제는 다음과 같습니다. 윤년이라면 다른 해를 요구하지 않습니다. 같은 해 루핑을 계속하면 무한 루프가 발생하고 Processing이 중단 될 수 있습니다.

이 문제를 해결하려면 두 경우 모두 새해를 요청해야합니다.