Недавно я написал программу, которая вычисляет число пятниц тринадцатых после 1900 года. Код отлично работает, и он работает; однако есть части, которые чрезвычайно избыточны. В любом случае я мог бы упростить это.Как я могу упростить свой код?
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class friday {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("friday.in"));
PrintWriter pw= new PrintWriter(new FileWriter("friday.out"));
int years = Integer.parseInt(br.readLine());
int saturday = 0;
int sunday = 0;
int monday = 0;
int tuesday = 0;
int wedensday = 0;
int thursday = 0;
int friday = 0;
int month = 1;
int day = 1;
int months = 12*years;
int test = 0;
int year = 1900;
for(int i = 0; i < months; i++)
{
if ((year % 4 == 0) && year % 100 != 0)
{
test = 1;
}
else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
{
test = 1;
}
else
{
test = 0;
}
if(month == 1)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 3) % 7;
}
if(month == 2)
{
if(test == 1)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
//leapyear = 1;
day = (day + 1) % 7;
}
else
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 0) % 7;
//leapyear++;
}
}
if(month == 3)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 3) % 7;
}
if(month == 4)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 2) % 7;
}
if(month == 5)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 3) % 7;
}
if(month == 6)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 2) % 7;
}
if(month == 7)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 3) % 7;
}
if(month == 8)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 3) % 7;
}
if(month == 9)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 2) % 7;
}
if(month == 10)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 3) % 7;
}
if(month == 11)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 2) % 7;
}
if(month == 0)
{
if(day == 1)
{
saturday++;
}
if(day == 2)
{
sunday++;
}
if(day == 3)
{
monday++;
}
if(day == 4)
{
tuesday++;
}
if(day == 5)
{
wedensday++;
}
if(day == 6)
{
thursday++;
}
if(day == 0)
{
friday++;
}
day = (day + 3) % 7;
year++;
}
month = (month + 1) % 12;
}
pw.println(saturday + " " + sunday + " " + monday + " " + tuesday + " " + wedensday+ " " + thursday + " " + friday);
pw.close();
//System.out.println(saturday + " " + sunday + " " + monday + " " + tuesday + " " + wedensday+ " " + thursday + " " + friday);
}
}
Если у вас есть функциональный код, http://www.codereview.stackexchange.com - более подходящее место для этого вопроса. – CubeJockey
Вы знаете массивы? Что-то подсказывает мне, что это может быть полезно. Или перечисления – Dici
** Комментарий от Parttimereaper: ** Ну, я бы, вероятно, использовал инструкции switch для удобочитаемости или использовал объект localdate, и просто продолжайте скатывать его каждый месяц после установки его на 13-й, а затем проверяя, нет ли его пятницы или нет – Dici