さて、Javaでうるう年を計算するプログラムを作ろうとしています。プログラムのその部分は正常に動作します。プログラムはユーザーに 2 年間 (開始と終了) のプロンプトを表示し、うるう年のみを出力します。うるう年が出力された後、何回出力されたかがカウントされます。
この時点までのすべてが完全に正常に機能します。今私の質問は、実際のうるう年が印刷される前にカウントを印刷する方法ですか? リストまたは配列に出力してからカウントを表示し、配列/リストを呼び出して事後に印刷する必要があると思います。しかし、私はこれを複雑にしすぎていると信じています。もっと簡単な方法はありますか? 助けてください。
import java.util.Scanner; //Imports Scanner to gather user input.
public class Program
{
public static void println(Object arg) //Shortens to println to make coding easier to read/follow.
{
System.out.println(arg); //prints on new line
}
public static void print(Object arg) //Shortens to print to make coding easier to read/follow.
{
System.out.print(arg); //prints on current line
}
public static void run()
{
Scanner in = new Scanner(System.in); //Defines Scanner to gather keyboard input.
println("Leap Years");
println("");
print("Enter the starting year: " );
while (!in.hasNextInt()) //This loop verifys that the input from the user is numerical and prompts to try again if not.
{
print("Numbers only! Enter the starting year: ");
in.next();
}
int y1 = in.nextInt();
while (y1 <1582) //Leap year was not established until 1582, this while loop ensures no dates before that time.
{
println("ERROR: Leap year was not implemented until 1582.");
print("Enter the starting year: " );
while (!in.hasNextInt())
{
print("Numbers only! Enter the starting year: ");
in.next();
}
y1 = in.nextInt();
}
print("Enter the ending year: " );
while (!in.hasNextInt())
{
print("Numbers only! Enter the ending year: ");
in.next();
}
int y2 = in.nextInt();
while (y2<y1) //This prevents the user from creating a reverse range.
{
println("ERROR: Ending year must not precede starting year.");
print("Enter the ending year: " );
while (!in.hasNextInt())
{
print("Numbers only! Enter the ending year: ");
in.next();
}
y2 = in.nextInt();
}
println("");
println("Leap years according to the Gregorian calendar from "+y1+" to "+y2+":");
println("");
int c=0; //Defines the count of leap years
for(int year=y1; year<=y2; year++) //Prints all years from user range.
{
if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) //Prints only leap years from user range.
{
++c;
println(year);
}
}
println("");
if(c>1 || c==0)
println("There are "+c+" leap years in this range.");
else
println("There is "+c+" leap year in this range.");
}
}
ありがとう
編集現在、出力は次のようになります。
1 2 3 ... この範囲には「x」回のうるう年があります。
出力を次のようにしたい:
この範囲には "x" 閏年があります。
1 2 3 ...