Search code examples
javastringjcreator

Why won't my String activate?


My problem is I am trying to make a message declared as a string show depending on whether or not it is true or false. The String not returning the right value is : snakeYearMsg

I have been trying to make this String return the desired value all day to no avail. In the end I tried a brute force method by listing all of the possible availabilities for SNAKE_YEAR.

The program lets the user enter data and then calculates an "Essscore" for them, depending on that input. My problem is that the last output of data to the user consistently displays that the user was born in a "Snake year" (a year of the snake, in the chinese zodiac), even if they are not.

This program is for an assignment that I have forgotten about and it is getting periously close to the due date, so any help will be greatly appreciated

the code is here:

/*Program designed by Some guy
*for KXT101 Assignment Number One*/


 import java.util.Scanner;
 public class AssigOne113

{
public static void main (String[] args)   
{
        final int CURRENT_YEAR = 2013;
        final int CALENDER_ROTATION = 12;
        final int SNAKE_YEAR = CURRENT_YEAR | 2001 | 1989 | 1977 | 1965 | 1953 | 1941 | 1929 | 1917 | 1905 | 1893 | 1881 | 1869 |
                                1857 | 1845 | 1833 | 1821 | 1809 | 1797 | 1785 | 1773 | 1761 | 1749 | 1737 | 1725 | 1713 | 1701 |
                                1689 | 1677 | 1665 | 1653 | 1641 | 1629 | 1617 | 1605 | 1593 | 1581 | 1569 | 1557 | 1545 | 1533 |
                                1521 | 1509 | 1497 | 1485 | 1473 | 1461 | 1449 | 1437 | 1425 | 1413 | 1401 | 1389 | 1377 | 1365 |
                                1353 | 1341 | 1329 | 1317 | 1305 | 1293 | 1281 | 1269 | 1257 | 1245 | 1233 | 1221 | 1209 | 1197 |
                                1185 | 1173 | 1161 | 1149 | 1137 | 1125 | 1113 | 1101 | 1089 | 1077 | 1065 | 1053 | 1041 | 1029 |
                                1017 | 1005 | 993  | 981  | 969  | 957  | 945  | 933  | 921  | 909  | 897  | 885  | 873  | 861  |
                                849  | 837  | 825  | 813  | 801  | 789  | 777  | 765  | 753  | 741  | 729  | 717  | 705  | 693  |
                                681  | 669  | 657  | 645  | 633  | 621  | 609  | 597  | 585  | 573  | 561  | 549  | 537  | 525  |
                                513  | 501  | 489  | 477  | 465  | 453  | 441  | 429  | 417  | 405  | 393  | 381  | 369  | 357  |
                                345  | 333  | 321  | 309  | 297  | 285  | 273  | 261  | 249  | 237  | 225  | 213  | 201  | 189  |
                                177  | 165  | 153  | 141  | 129  | 117  | 105  | 93   | 81   | 69   | 57   | 45   | 33   | 21   |
                                9;
        final int SUMMER_MONTH_JAN = 1;
        final int SUMMER_MONTH_FEB = 2;
        final int SUMMER_MONTH_DEC = 12;
        final int AUTUMN_MONTH_MAR = 3;
        final int AUTUMN_MONTH_APR = 4;
        final int AUTUMN_MONTH_MAY = 5;                         
        final int WINTER_MONTH_JUN = 6;
        final int WINTER_MONTH_JUL = 7;
        final int WINTER_MONTH_AUG = 8;                     
        final int SPRING_MONTH_SEP = 9;
        final int SPRING_MONTH_OCT = 10;
        final int SPRING_MONTH_NOV = 11;
        final int SIXTH_DAY = 06;
        final int SEVENTH_DAY = 07;
        final int JANUARY = 1;
        final int FEBUARY = 2;
        final int MARCH = 3;
        final int APRIL = 4;
        final int MAY = 5;
        final int JUNE = 6;
        final int JULY = 7;
        final int AUGUST = 8;
        final int SEPTEMBER = 9;
        final int OCTOBER = 10;
        final int NOVEMBER = 11;
        final int DECEMBER = 12;
        final int CALENDER_MAX = 12;

        Scanner sc;

        String essscorecalculate;
        String essscorerepeat;
        String userName;
        int birthYear;
        String junk;

        int yob;
        int day;
        int month = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
        int essscore = 0;
        String summer = "Summer";
        String autumn = "Autumn";
        String winter = "Winter";
        String spring = "Spring";
        String seasonBorn = "any season";
        String monthBorn = "any month";
        String snakeYearMsg = "the year";

        boolean snakeYearBool;
        boolean haveS;

        double birthDay;

        char initial;

        //program begins

        System.out.println(" ");
        System.out.println("<------------------------------------------->");
        System.out.println("Sammy Snakes Sixth/Seventh Spring Of Success");
        System.out.println("<------------------------------------------->");
        System.out.println(" ");

        System.out.println("<------------------------------------------->");
        System.out.println("    I can calculate an Ess-Score for you     ");    
        System.out.println("   Would you like to calculate an Ess-Score? ");
        System.out.println("<------------------------------------------->");
        sc = new Scanner(System.in);
        essscorecalculate = sc.nextLine();
        {
            /*essscore.Reset;*/
            {

            }
        }
        System.out.println("<------------------------------------------->");
        System.out.println("         To begin, what is your name?        ");
        System.out.println("<------------------------------------------->");
        userName = sc.nextLine();
        initial =(userName.charAt(0));
        {
            if (initial == 'S')
                essscore =+ 4;
            if (initial == 's')
                essscore =+ 4;                  

        }
        System.out.println("<----------------------------------------------------------------->");
        System.out.println("  What year were you born? (Please enter in following format XXXX) ");
        System.out.println("<----------------------------------------------------------------->");
        birthYear = sc.nextInt();
        junk = sc.nextLine();
        {
            {
                if (birthYear == SNAKE_YEAR)
                    snakeYearBool = true;
                /*  essscore =+ 16; */      
                else if (birthYear != SNAKE_YEAR)
                    snakeYearBool = false;
            }
                {
                    if (snakeYearBool = false)
                        snakeYearMsg = "A non Snake year";
                    if (snakeYearBool = true)
                        snakeYearMsg = "Snake year";

                if (birthYear != SNAKE_YEAR)
                    essscore ++;            
                }
            }
        System.out.println("<--------------------------------------------------------------------->");
        System.out.println("Please enter your birthday (please enter in the following format DD.MM)");
        System.out.println("<--------------------------------------------------------------------->");
        birthDay = sc.nextDouble();
        junk = sc.nextLine();

            {
                {
                    day = (int)birthDay;
                        if (day == SIXTH_DAY)
                            essscore =+ 8;
                        if (day == SEVENTH_DAY)
                            essscore =+ 8;
                }
                {
                    month = ((int)Math.round(100*birthDay))%100;
                        /*System.out.print(month);*/
                }

                    {
                        if (month == 1)
                            monthBorn = "January";
                        if (month == 2)
                            monthBorn = "Febuary";
                        if (month == 3)
                            monthBorn = "March";
                        if (month == 4)
                            monthBorn = "April";
                        if (month == 5)
                            monthBorn = "May";                      
                        if (month == 6)
                            monthBorn = "June";                     
                        if (month == 7)
                            monthBorn = "July";                     
                        if (month == 8)
                            monthBorn = "August";                       
                        if (month == 9)
                            monthBorn = "September";                        
                        if (month == 10)
                            monthBorn = "October";                      
                        if (month == 11)
                            monthBorn = "November";                     
                        if (month == 12)
                            monthBorn = "December";                     
                    }

                {
                    if (month == SPRING_MONTH_SEP)
                        essscore =+2;
                    if (month == SPRING_MONTH_OCT)
                        essscore =+2;
                    if (month == SPRING_MONTH_NOV)
                        essscore =+2;                                                                       
                    {

                    if (month == SPRING_MONTH_SEP)                                                                                                                  
                        seasonBorn = "Spring";
                    else if (month == SPRING_MONTH_OCT)                                                                                                                 
                        seasonBorn = "Spring";
                    else if (month == SPRING_MONTH_NOV)                                                                                                                 
                        seasonBorn = "Spring";                      
                    else if (month ==AUTUMN_MONTH_MAR)
                        seasonBorn = "Autumn";
                    else if (month ==AUTUMN_MONTH_APR)
                        seasonBorn = "Autumn";
                    else if (month ==AUTUMN_MONTH_MAY)
                        seasonBorn = "Autumn";                          
                    else if (month == WINTER_MONTH_JUN)
                        seasonBorn = "Winter";
                    else if (month == WINTER_MONTH_JUL)
                        seasonBorn = "Winter";
                    else if (month == WINTER_MONTH_AUG)
                        seasonBorn = "Winter";                                                      
                    else if (month == SUMMER_MONTH_JAN)
                        seasonBorn = "Summer";
                    else if (month == SUMMER_MONTH_FEB)
                        seasonBorn = "Summer";
                    else if (month == SUMMER_MONTH_DEC)
                        seasonBorn = "Summer";                          
                    }
                }       
            }
        System.out.println("<------------------------------------------------>");   
        System.out.println(""+userName+" was born in "+seasonBorn+" on "+monthBorn+" "+day+" in "+snakeYearMsg+" "+birthYear+" ");
        System.out.println(""+essscore+""); 
        System.out.println("<------------------------------------------------>");

        System.out.println("<------------------------------------------------>");
        System.out.println("  Would you like to calculate another Ess-Score?  ");
        System.out.println("<------------------------------------------------>");
        essscorerepeat = sc.next();
}   

}


Solution

  • While I won't say this is the only problem, one crucial problem is that using a bitwise-or in an attempt to encode years (and months) is wrong.

    This is because int SNAKE_YEAR = x | y | z .. results in a single integer value which is known as SNAKE_YEAR. Because the components (all the years) have overlapping bit sequences this results in a loss of information. However, even if there isn't a loss of information, this leads to incorrect results when using a simple == (e.g. SNAKE_YEAR == 2001 results in false when it should be true).

    Instead, use a List (or a Set) and contains or, better create a method that uses a discrete formula (i.e bool isYearOfSnake(int year)). I'm going to guess that the "cyclic 12 year structure" can be handled using a simple modulus from the difference to a known Snake year ..