2016-10-25 10 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を作成しました。ただし、プログラムは1つのエラーに基づいて実行されません。処理中のセットアップで関数を呼び出す

(3行目) "このメソッドは、ブール型の結果を返す必要があります。"

ヘッダーに関数型としてブール値を入れているので、私はすでにそれをしていませんか? if文のブロックとしてtrueを返します。

また、セットアップから関数を適切に呼び出すことができるかどうかはわかりません。私は何かが足りないように感じます。

任意の明確化が認められるであろう。

編集:(行7と8)私はそれを完成させ、elseを追加してfalseを返します。 何らかの理由で、2000を入力したときに "2000年が閏年です"と表示された後、処理がクラッシュします。無限ループが起こっていますか?どうすれば修正できますか?

+0

あなたのメソッドは、うるう年でない値に対してどのような値を返しますか? –

+0

ああ、私はそれについて完全に忘れてしまった。私はelse()がfalseを返すべきだと思います。 –

+0

@ PM77-1ねえ、私はfalseを返すためにelse文を入れましたが、複数の行を印刷した後に処理がクラッシュしています。何かの無限ループがありますか? –

答えて

0

プログラムを頭で、または紙と鉛筆で実行します。一度に1行にしてください:

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

この行はユーザーから1年です。ユーザーが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あるので、我々はもう一度、再び上記繰り返し、再び、と。

問題は次のとおりです。うるう年であれば、もう1年は尋ねることはありません。同じ年にループを繰り返すだけで無限ループが発生し、処理がクラッシュする可能性があります。

この問題を解決するには、どちらの場合でも新しい年を尋ねる必要があります。

関連する問題