/* Program Name: BadDate.java
Function: This program determines if a date entered by the user is valid.
Input: Interactive
Output: Valid date is printed or user is alerted that an invalid date was entered.
*/
import javax.swing.JOptionPane;
import java.util.Scanner;
public class BadDate
{
public static void main
(String args
[]) {
// Declare variables
Scanner userInput
= new Scanner
(System.
in); int year;
int month;
int day;
boolean validDate = true;
final int MIN_YEAR = 0, MIN_MONTH = 1, MAX_MONTH = 12, MIN_DAY = 1, MAX_DAY = 31;
// This is the work of the housekeeping() method
// Get the year, then the month, then the day
System.
out.
println("Please enter the Month"); monthString = userInput.nextLine();
System.
out.
println("Please enter the Day"); dayString = userInput.nextLine();
System.
out.
println("Please enter the Year"); yearString = userInput.nextLine();
// Convert Strings to integers
month
= Integer.
parseInt(monthString
); year
= Integer.
parseInt(yearString
);
// This is the work of the detailLoop() method
// Check to be sure date is valid
if( year <= MIN_YEAR ) // invalid year
validDate = false;
else if ( month < MIN_MONTH || month > MAX_MONTH ) // invalid month
validDate = false;
else if ( day < MIN_DAY || day > MAX_DAY ) // invalid day
validDate = false;
// This is the work of the endOfJob() method
// Test to see if date is valid and output date and whether it is valid or not
if( validDate == true )
{ System.
out.
println("(month)/(day)/(year) is a valid date"); // Output statement
}
else
{ System.
out.
println("(month)/(day)/(year) is an invalid date"); // Output statement
}
} // end of main() method
} // end of BadDate class
LyogUHJvZ3JhbSBOYW1lOiBCYWREYXRlLmphdmEKICAgRnVuY3Rpb246IFRoaXMgcHJvZ3JhbSBkZXRlcm1pbmVzIGlmIGEgZGF0ZSBlbnRlcmVkIGJ5IHRoZSB1c2VyIGlzIHZhbGlkLiAgCiAgIElucHV0OiAgSW50ZXJhY3RpdmUKICAgT3V0cHV0OiBWYWxpZCBkYXRlIGlzIHByaW50ZWQgb3IgdXNlciBpcyBhbGVydGVkIHRoYXQgYW4gaW52YWxpZCBkYXRlIHdhcyBlbnRlcmVkLgoqLyAgCiAKaW1wb3J0IGphdmF4LnN3aW5nLkpPcHRpb25QYW5lOwppbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7CnB1YmxpYyBjbGFzcyBCYWREYXRlCnsKICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKICAgewogICAgIC8vIERlY2xhcmUgdmFyaWFibGVzCiAgICAgU2Nhbm5lciB1c2VySW5wdXQgPSBuZXcgU2Nhbm5lciAoU3lzdGVtLmluKTsKICAgICBTdHJpbmcgeWVhclN0cmluZzsKICAgICBTdHJpbmcgbW9udGhTdHJpbmc7CiAgICAgU3RyaW5nIGRheVN0cmluZzsKICAgICBpbnQgeWVhcjsKICAgICBpbnQgbW9udGg7CiAgICAgaW50IGRheTsKICAgICBib29sZWFuIHZhbGlkRGF0ZSA9IHRydWU7CiAgICAgZmluYWwgaW50IE1JTl9ZRUFSID0gMCwgTUlOX01PTlRIID0gMSwgTUFYX01PTlRIID0gMTIsIE1JTl9EQVkgPSAxLCBNQVhfREFZID0gMzE7CiAKICAgICAvLyBUaGlzIGlzIHRoZSB3b3JrIG9mIHRoZSBob3VzZWtlZXBpbmcoKSBtZXRob2QKICAgICAvLyBHZXQgdGhlIHllYXIsIHRoZW4gdGhlIG1vbnRoLCB0aGVuIHRoZSBkYXkKICAgICAgICAgICAgICAgCiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgdGhlIE1vbnRoIik7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoU3RyaW5nID0gdXNlcklucHV0Lm5leHRMaW5lKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBlbnRlciB0aGUgRGF5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGRheVN0cmluZyA9IHVzZXJJbnB1dC5uZXh0TGluZSgpOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgZW50ZXIgdGhlIFllYXIiKTsKICAgICAgICAgICAgICAgIHllYXJTdHJpbmcgPSB1c2VySW5wdXQubmV4dExpbmUoKTsKICAgCiAKICAgICAvLyBDb252ZXJ0IFN0cmluZ3MgdG8gaW50ZWdlcnMKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSBJbnRlZ2VyLnBhcnNlSW50KG1vbnRoU3RyaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgZGF5ID0gSW50ZWdlci5wYXJzZUludChkYXlTdHJpbmcpOwogICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gSW50ZWdlci5wYXJzZUludCh5ZWFyU3RyaW5nKTsKIAogICAgIC8vIFRoaXMgaXMgdGhlIHdvcmsgb2YgdGhlIGRldGFpbExvb3AoKSBtZXRob2QKICAgICAvLyBDaGVjayB0byBiZSBzdXJlIGRhdGUgaXMgdmFsaWQKICAgICBpZiggeWVhciA8PSBNSU5fWUVBUiApICAvLyBpbnZhbGlkIHllYXIKICAgICAgICAgICAgICAgIHZhbGlkRGF0ZSA9IGZhbHNlOwogICAgIGVsc2UgaWYgKCBtb250aCA8IE1JTl9NT05USCB8fCBtb250aCA+IE1BWF9NT05USCApICAvLyBpbnZhbGlkIG1vbnRoCiAgICAgICAgICAgICAgICB2YWxpZERhdGUgPSBmYWxzZTsKICAgICBlbHNlIGlmICggZGF5IDwgTUlOX0RBWSB8fCBkYXkgPiBNQVhfREFZICkgLy8gaW52YWxpZCBkYXkKICAgICAgICAgICAgICAgIHZhbGlkRGF0ZSA9IGZhbHNlOwogCiAKICAgICAKICAgICAvLyBUaGlzIGlzIHRoZSB3b3JrIG9mIHRoZSBlbmRPZkpvYigpIG1ldGhvZAogICAgIC8vIFRlc3QgdG8gc2VlIGlmIGRhdGUgaXMgdmFsaWQgYW5kIG91dHB1dCBkYXRlIGFuZCB3aGV0aGVyIGl0IGlzIHZhbGlkIG9yIG5vdAogICAgIGlmKCB2YWxpZERhdGUgPT0gdHJ1ZSApCiAgICAgICAgIAogICAgIHsgU3lzdGVtLm91dC5wcmludGxuKCIobW9udGgpLyhkYXkpLyh5ZWFyKSBpcyBhIHZhbGlkIGRhdGUiKTsKICAgICAgICAvLyBPdXRwdXQgc3RhdGVtZW50CiAKICAgICB9CiAgICAgZWxzZQogICAgIHsgU3lzdGVtLm91dC5wcmludGxuKCIobW9udGgpLyhkYXkpLyh5ZWFyKSBpcyBhbiBpbnZhbGlkIGRhdGUiKTsKICAgICAgICAvLyBPdXRwdXQgc3RhdGVtZW50CiAgICAgICAKICAgICB9CiAgICAgCiAgIH0gLy8gZW5kIG9mIG1haW4oKSBtZXRob2QKIAp9IC8vIGVuZCBvZiBCYWREYXRlIGNsYXNz