Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

Results 1 to 4 of 4

Thread: Zellers Congruence

  1. #1
    Junior Member
    Join Date
    Feb 2013
    Posts
    7
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Default Zellers Congruence

    Hi I am trying to solve Zellers Congruence and I am having a little trouble. Here's my instructions:


    1) Allow the user to enter a month. For calculation purposes, January = 1, February = 2, ... December = 12.
    2) Enter a day of the month(1..31) Error checking is not necessary at this point, but would be helpful.
    3) Enter a year using 4 digits (e.g., 1776, 1994, 2001)
    4) Find the adjusted month and adjusted year
    If the month entered is less than or equal to 2
    Add 10 to it
    Subtract 1 from the year entered

    Otherwise
    Subtract 2 from the month
    Leave the year alone
    5)Find the month correctionby
    Multiplying the adjusted month by 26
    Subtract 2 from the above
    Integer divide the above by 10
    6) Determine the century by integer dividing the adjusted year by 100
    7)Determine the century remainder by finding the modulus 100 of the adjusted year
    8)Determine the year correction by
    Multiplying the century by five then
    Adding the following to it
    The century remainder
    The century remainder integer divided by 4
    The century integer divided by 4
    9) Determine which weekday by
    Adding the day, month correction, and year correction
    Finding the above sum's modulus 7

    If the solution to step 9 is '0', then the day is "Sunday". If it's '1', then the day is "Monday", ... if it's 6, then "Saturday".

    So far i have this:

    System.out.print("Enter the month (1-12): ");
    int month = keyboard.nextInt();

    System.out.println("Enter the day of the month (1-31):");
    int day1 = keyboard.nextInt();

    System.out.println("Enter a year (e.g, 1776,2003,2005):");
    int year1 = keyboard.nextInt();


    int adjustedMonth, adjustedYear, century, monthCorrection;
    if (month <= 2)
    {
    adjustedMonth = month += 10;
    adjustedYear=year1 -=1;
    }

    else
    {
    adjustedMonth = month-=2;
    adjustedYear = year1;
    }
    //step 5
    monthCorrection = (((adjustedMonth * 26) - 2) % 10);
    century = adjustedYear % 100;


    I am wondering if i am on the right track and if someone could help me guide the right way. I would appreciate it. So far i got up to step 6 of the instructions i was to do. Any help is great! Thank you!

  2. Default Related threads:


  3. #2
    Member
    Join Date
    Jun 2012
    Location
    Left Coast, USA
    Posts
    451
    My Mood
    Mellow
    Thanks
    1
    Thanked 97 Times in 88 Posts

    Default Re: Zellers Congruence

    Quote Originally Posted by malith View Post
    ...
    I am wondering if i am on the right track,,,
    Here is a track that I recommend for all (yes, all) projects:

    1. Make a complete program that you can compile and execute. Start with a public class definition and an empty main() method.

    2. Implement the assignment a step at a time by adding code to main(). If other methods are required, implement and test each one.

    3. Test the results of each step before going on to the next step. Maybe put print statements after each user input and after each calculation. Sometimes you may want to put print statements inside an "if{}" block or some loop or whatever. In particular, make absolutely sure that the program is getting what you expect for input data.



    The main thing, as far as I am concerned is this:

    Plan the entire program (figure out what classes, what variables and what methods you will be needing) but don't write any code just yet.

    Make up a few test cases for which you know what values will be calculated and used by the program. Make sure you know what the right answers are for the test cases. (If there are no published test cases, follow the instructions "by hand" using pencil and paper for the calculations.)

    Now, your assignment seems to define the steps completely and unambiguously, right? If there is some part you don't understand, figure it out (or ask whoever it was that made the assignment to clarify).

    Then, and only then, you are ready to start coding.

    So,,,

    Implement and test each step before going to the next: Run your test cases through the program and make sure that the results of what you have, so far, are valid.

    Here are some of the steps (that you have already implemented), with some print statements to make sure you know what the program is seeing and what it is doing at each step:

    // Import whatever packages you need
     
    // Declare a class
    //
    public class Whatever
     
        //Create a main()  method
        //
        public static void main(String [] args) {
            //
            // Put whatever variable declarations/definitions you need.
            // For example, define keyboard and assign an appropriate value.
            //
     
            System.out.print("Enter the month            (1-12) : ");
            int month = keyboard.nextInt();
            System.out.println("You entered " + month);
     
            System.out.print("Enter the day of the month (1-31) : ");
            int day1 = keyboard.nextInt();
            System.out.println("You entered " + day1);
     
            System.out.print("Enter the year  (e.g, 1776, 2013) : ");
            int year1 = keyboard.nextInt();
            System.out.println("You entered " + year1);
     
     
            int adjustedMonth, adjustedYear, century, monthCorrection;
            if (month <= 2) {
                adjustedMonth = month += 10;
                adjustedYear=year1 -=1;
                }
     
            else {
                adjustedMonth = month-=2;   
                adjustedYear = year1;
            }
            System.out.println("\nadjustedMonth = " + adjustedMonth +
                               ", adjustedYear = " + adjustedYear);
     
            //
            // If either of the two previous values is not what you expect, look
            // carefully at the code.  If you can't see what the problem is, go back
            // and put print statements inside the if{} block and inside the else{} block.
     
            monthCorrection = (((adjustedMonth * 26) - 2) % 10);
            // For debugging: print monthCorrection
     
            century = adjustedYear % 100;
            // For debugging: print century
            //
            // etc.
            //
        } // End of main()
    } // End of class definition

    A run:
    Enter the month            (1-12) : 1
    You entered 1
    Enter the day of the month (1-31) : 28
    You entered 28
    Enter the year  (e.g, 1776, 2013) : 2013
    You entered 2013
     
    adjustedMonth = 11, adjustedYear = 2012


    So, now I will ask you: Is this correct so far? If it is, then you are not only on the right track, you are headed in the right direction!


    After a few projects, maybe you won't see the need for stinkin' print statements at each and every stinkin' step, so maybe just verify user input and then print results. If the results don't agree with your expectations, go back and print some intermediate results to let you zero in on the problem area. (Or, maybe, adjust your expectations. Are you absolutely sure that you know the correct answer for the test case that failed?)

    Or some such thing.


    Cheers!

    Z

    Quote Originally Posted by Gold Hat
    Print statements?
    We ain't got no print statements.
    We don't need no print statements!
    I don't have to show you any stinkin' print statements!
    ---What Gold Hat (in the movie The Treasure of the Sierra Madre)
    would have said if he were a Java programmer with no clue as to
    how to debug a program, and if he were challenged by a forum
    contributor to show some print statements to validate some of the
    intermediate calculations.

  4. The Following User Says Thank You to Zaphod_b For This Useful Post:

    malith (February 18th, 2013)

  5. #3
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    25,140
    Thanks
    65
    Thanked 2,720 Times in 2,670 Posts

    Default Re: Zellers Congruence

    Great post. It should be in the blog section where we can point links to for future OPs to consider.
    If you don't understand my answer, don't ignore it, ask a question.

  6. #4
    Junior Member
    Join Date
    Feb 2013
    Posts
    7
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Default Re: Zellers Congruence

    Thank you Zaphod! This actually helped a lot. Good tips and ways to approach a program for every person who is doing programming. I got it all completed with no errors. I will definitely use your tips to approach my upcoming programs and I agree with Norm. It should be in the blog section where we can point links to for future. Thanks again.

Similar Threads

  1. Zellar's Congruence error
    By ChuChuTrick in forum What's Wrong With My Code?
    Replies: 1
    Last Post: September 11th, 2012, 09:32 PM

Tags for this Thread