algorithm - Days Between Dates Java (homework) -
this couple days off when run program. advice on doing wrong?
i know there simpler way it, i'm trying show actual steps in finding days between.
homework assignment, cannot use date-time libraries.
public class daysbetween { public static void main (string []args) { long months1 = long.parselong(args[0]); long days1 = long.parselong(args[1]); long year1 = long.parselong(args[2]); long months2 = long.parselong(args[3]); long days2 = long.parselong(args[4]); long year2 = long.parselong(args[5]); long daysbetween = 0; long leapyearcounter = 0; boolean leapyear1 = false; boolean leapyear2 = false; boolean valid1 = true; boolean valid2 = true; int earlier = 0; // tests see date earlier if (year1 == year2){ if (months1 == months2) { if (days1 == days2) { daysbetween = daysbetween; } else if (days1 < days2) { earlier = 1; } } else if (months1 < months2) { earlier = 1; } } else if (year1 < year2 ) { earlier = 1; } // switches dates depending on earlier switch(earlier) { case 1: months1 = long.parselong(args[0]); days1 = long.parselong(args[1]); year1 = long.parselong(args[2]); months2 = long.parselong(args[3]); days2 = long.parselong(args[4]); year2 = long.parselong(args[5]); break; default: months1 = long.parselong(args[3]); days1 = long.parselong(args[4]); year1 = long.parselong(args[5]); months2 = long.parselong(args[0]); days2 = long.parselong(args[1]); year2 = long.parselong(args[2]); break; } //this section tests if earlier date valid if((year1 % 4 == 0) && (year1 % 100 != 0) || (year1 % 400 == 0)) { leapyear1 = true; } if ((leapyear1 == true) && (months1 == 2)) { if (days1 <= 29 && days1 >=1){ valid1 = true; } } else if ((leapyear1 == false) && (months1 == 2)){ if (days1 <= 28 && days1 >= 1){ valid1 = true; } } if (months1 != 2) { if (months1 < 8 ) { if (months1 %2 != 0) { if (days1 <= 31 && days1 >=1){ valid1 = true; } else { valid1 = false; } } else if (months1 %2 == 0) { if (days1 <= 30 && days1 >=1){ valid1 = true; } else { valid1 = false; } } } else if (months1 > 8) { if (months1 %2 != 0) { if (days1 <= 30 && days1 >=1){ valid1 = true; } else { valid1 = false; } } else if (months1 %2 == 0) { if (days1 <= 31 && days1 >=1){ valid1 = true; } else { valid1 = false; } } } } // section tests if later date valid if((year2 % 4 == 0) && (year2 % 100 != 0) || (year2 % 400 == 0)) { leapyear2 = true; } if ((leapyear2 == true) && (months2 == 2)) { if (days2 <= 29 && days2 >=1){ valid2 = true; } } else if ((leapyear2 == false) && (months2 == 2)){ if (days2 <= 28 && days2 >= 1){ valid2 = true; } } if (months2 != 2) { if (months2 < 8 ) { if (months2 %2 != 0) { if (days2 <= 31 && days2 >=1){ valid2 = true; } else { valid2 = false; } } else if (months2 %2 == 0) { if (days2 <= 30 && days2 >=1){ valid2 = true; } else { valid2 = false; } } } else if (months2 > 8) { if (months2 %2 != 0) { if (days2 <= 30 && days2 >=1){ valid2 = true; } else { valid2 = false; } } else if (months2 %2 == 0) { if (days2 <= 31 && days2 >=1){ valid2 = true; } else { valid2 = false; } } } } //this adds day total if earlier date in january & leap year if ((months1 == 1) && (leapyear1 == true)) { daysbetween = daysbetween +1; } //this adds months left in year1 if (months1 == 1) { daysbetween = daysbetween + 334; } else if (months1 == 2) { daysbetween = daysbetween + 306; } else if (months1 == 3) { daysbetween = daysbetween + 275; } else if (months1 == 4) { daysbetween = daysbetween + 245; } else if (months1 == 5) { daysbetween = daysbetween + 214; } else if (months1 == 6) { daysbetween = daysbetween + 184; } else if (months1 == 7) { daysbetween = daysbetween + 153; } else if (months1 == 8) { daysbetween = daysbetween + 122; } else if (months1 == 9) { daysbetween = daysbetween + 92; } else if (months1 == 10) { daysbetween = daysbetween + 61; } else if (months1 == 11) { daysbetween = daysbetween + 31; } else { } // adds day if year2 leap year , if month march or later if ((months2 >= 3) && (leapyear2 = true)) { daysbetween = daysbetween + 1; } // adds months month in year2 if (months2 == 1) { daysbetween = daysbetween; } else if (months2 == 2) { daysbetween = daysbetween + 31; } else if (months2 == 3) { daysbetween = daysbetween + 59; } else if (months2 == 4) { daysbetween = daysbetween + 90; } else if (months2 == 5) { daysbetween = daysbetween + 120; } else if (months2 == 6) { daysbetween = daysbetween + 151; } else if (months2 == 7) { daysbetween = daysbetween + 181; } else if (months2 == 8) { daysbetween = daysbetween + 212; } else if (months2 == 9) { daysbetween = daysbetween + 243; } else if (months2 == 10) { daysbetween = daysbetween + 273; } else if (months2 == 11) { daysbetween = daysbetween + 304; } else if (months2 == 12) { daysbetween = daysbetween + 334; } else { } //this add days left in month1 if (months1 != 2) { if (months1 < 8 ) { if (months1 %2 != 0) { daysbetween = daysbetween + (31 - days1); } else if (months1 %2 == 0) { daysbetween = daysbetween + (30 - days1); } } else if (months1 > 8) { if (months1 %2 != 0) { daysbetween = daysbetween + (30 - days1); } else if (months1 %2 == 0) { daysbetween = daysbetween + (31 - days1); } } } // add days left in month1 if feb if ((leapyear1 == true) && (months1 == 2)) { daysbetween = daysbetween + (29 - days1); } else { daysbetween = daysbetween + (28 - days1); } daysbetween = daysbetween + days2; // adds days left in month2 daysbetween = daysbetween + ((((year2-1)-(year1+1))+1)*365); // adds days in years total (long = (year1+1); < (year2-1) ; i++) { // sees # of leapyears b/n year1 & year2 if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0)) { leapyearcounter++; } } daysbetween = daysbetween + leapyearcounter; // adds leapyear days if ((valid1 == false) || (valid2 == false)) { system.out.println("sorry! gave me 1 or more invalid dates!"); } else if (daysbetween == 1){ system.out.println("there " + daysbetween + " day between 2 dates!"); } else if (daysbetween != 1) { system.out.println("there " + daysbetween + " days between 2 dates!"); } else if (daysbetween == 0) { system.out.println("there no days between 2 dates!"); } } }
unless homework or self hurting thing have going can recommend using joda time library datetime calculations:
time use joda answer: ~22 minutes
Comments
Post a Comment