Question

I am writing a program that prompts fora birthday ( such as 02 14) and then prints out in words the date you entered, as well as the Zodiac for that date. Here is my code.

public class Horoscope{

public String getBirthday (String birth)
{
    String month = birth.substring(0, 2);
    String day = birth.substring(3, 5); 

    if(month.equals("01"))
    {
        month = "January ";
    }//end of January

    else if (month.equals("02"))
    {
        month = "Feburary ";
    }//end of Feb.


    else if (month.equals("03"))
    {
        month = "March ";
    }//end of March

    else if (month.equals("04"))
    {
        month = "April ";
    }//end of April

    else if (month.equals("05"))
    {
        month = "May ";
    }//end of may

    else if (month.equals("06"))
    {
        month = "June ";
    }//end of June

    else if (month.equals("07"))
    {
        month = "July ";
    }//end of July

    else if (month.equals("08"))
    {
        month = "August ";
    }//end of August

    else if (month.equals("09"))
    {
        month = "September ";
    }//end of Sept

    else if (month.equals("10"))
    {
        month = "October ";
    }//end of Oct

    else if (month.equals("11"))
    {
        month = "November ";
    }//end of nov

    else if (month.equals("12"))
    {
        month = "December ";
    }//end of Dec

    else
    {
        System.out.println("Invaid month type.");
    }//end of invalid



    if(day.equals("01"))
    {
        day = "1st";            
    }//end of 1

    else if (day.equals("02"))
    {
        day = "2nd";
    }//end of 2

    else if(day.equals("03"))
    {
        day = "3rd";
    }

    else if(day.equals("04"))
    {
        day = "4th";
    }//end of 4

    else if(day.equals("05"))
    {
        day = "5th";
    }//end of 5th

    else if(day.equals("06"))
    {
        day = "6th";
    }
    else if(day.equals("07"))
    {
        day = "7th";
    }
    else if(day.equals("08"))
    {
        day = "8th";
    }
    else if(day.equals("09"))
    {
        day = "9th";
    }
    else if(day.equals("10"))
    {
        day = "10th";
    }//end of 10th
    else if(day.equals("11"))
    {
        day = "11th";
    }
    else if(day.equals("12"))
    {
        day = "12th";
    }
    else if(day.equals("13"))
    {
        day = "13th";
    }
    else if(day.equals("14"))
    {
        day = "14th";
    }
    else if(day.equals("15"))
    {
        day = "15th";
    }//end of 15
    else if(day.equals("16"))
    {
        day = "16th";
    }
    else if(day.equals("17"))
    {
        day = "17th";
    }
    else if(day.equals("18"))
    {
        day = "18th";
    }
    else if(day.equals("19"))
    {
        day = "19th";
    }

    else if(day.equals("20"))
    {
        day = "20th";
    }//end of 20th

    else if(day.equals("21"))
    {
        day = "21st";
    }

    else if(day.equals("22"))
    {
        day = "22nd";
    }

    else if(day.equals("23"))
    {
        day = "23rd";
    }

    else if(day.equals("24"))
    {
        day = "24th";
    }

    else if(day.equals("25"))
    {
        day = "25th";
    }//end of 25th

    else if(day.equals("26"))
    {
        day = "26th";
    }

    else if(day.equals("27"))
    {
        day = "27th";
    }

    else if(day.equals("28"))
    {
        day = "28th";
    }

    else if(day.equals("28"))
    {
        day = "28th";
    }

    else if(day.equals("29"))
    {
        day = "29th";
    }

    else if(day.equals("30"))
    {
        day = "30th";
    }//end of the 30th

    else if(day.equals("31"))
    {
        day = "31st";
    }

    else 
    {
        System.out.println("Invalid day type.");
    }

    return month + day;






    }

private int parseInt(String substring) {
    // TODO Auto-generated method stub
    return 0;
}


public String getZodiac(String zodiac)
{
    String zodiacMonthS = zodiac.substring(0, 2);
    String zodiacDayS = zodiac.substring(3, 5);
    int zodiacMonth = parseInt(zodiacMonthS);
    int zodiacDay = parseInt(zodiacDayS);
    String zodiacFinal;

            if      ((zodiacMonth == 12 && zodiacDay >= 22 && zodiacDay <= 31) || (zodiacMonth ==  1 && zodiacDay >= 1 && zodiacDay <= 19))
             zodiacFinal = "Capricorn";
           else if ((zodiacMonth ==  1 && zodiacDay >= 20 && zodiacDay <= 31) || (zodiacMonth ==  2 && zodiacDay >= 1 && zodiacDay <= 17))
             zodiacFinal = "Aquarius";
           else if ((zodiacMonth ==  2 && zodiacDay >= 18 && zodiacDay <= 29) || (zodiacMonth ==  3 && zodiacDay >= 1 && zodiacDay <= 19))
               zodiacFinal = "Pisces";
           else if ((zodiacMonth ==  3 && zodiacDay >= 20 && zodiacDay <= 31) || (zodiacMonth ==  4 && zodiacDay >= 1 && zodiacDay <= 19))
             zodiacFinal = "Aries";
           else if ((zodiacMonth ==  4 && zodiacDay >= 20 && zodiacDay <= 30) || (zodiacMonth ==  5 && zodiacDay >= 1 && zodiacDay <= 20))
            zodiacFinal = "Taurus";
           else if ((zodiacMonth ==  5 && zodiacDay >= 21 && zodiacDay <= 31) || (zodiacMonth ==  6 && zodiacDay >= 1 && zodiacDay <= 20))
            zodiacFinal = "Gemini";
           else if ((zodiacMonth ==  6 && zodiacDay >= 21 && zodiacDay <= 30) || (zodiacMonth ==  7 && zodiacDay >= 1 && zodiacDay <= 22))
            zodiacFinal = "Cancer";
           else if ((zodiacMonth ==  7 && zodiacDay >= 23 && zodiacDay <= 31) || (zodiacMonth ==  8 && zodiacDay >= 1 && zodiacDay <= 22))
            zodiacFinal = "Leo";
           else if ((zodiacMonth ==  8 && zodiacDay >= 23 && zodiacDay <= 31) || (zodiacMonth ==  9 && zodiacDay >= 1 && zodiacDay <= 22))
            zodiacFinal = "Virgo";
           else if ((zodiacMonth ==  9 && zodiacDay >= 23 && zodiacDay <= 30) || (zodiacMonth == 10 && zodiacDay >= 1 && zodiacDay <= 22))
            zodiacFinal = "Libra";
           else if ((zodiacMonth == 10 && zodiacDay >= 23 && zodiacDay <= 31) || (zodiacMonth == 11 && zodiacDay >= 1 && zodiacDay <= 21))
            zodiacFinal = "Scorpio";
           else if ((zodiacMonth == 11 && zodiacDay >= 22 && zodiacDay <= 30) || (zodiacMonth == 12 && zodiacDay >= 1 && zodiacDay <= 21))
            zodiacFinal = "Sagittarius";
           else
            zodiacFinal = "Illegal date";


            return zodiacFinal;
}


}

And here is my tester:

import java.util.Scanner; 

public class HoroscopeTester {

/**
 * @param args
 */
public static void main(String[] args) 
{
    System.out.println("What is your birthday? Type in month and year as two numbers.  Ex. 01 01(January 1st)");

    Scanner scanner = new Scanner(System.in);

    String birth = scanner.nextLine();
    String zodiac = scanner.nextLine();

    Horoscope horoscope = new Horoscope();

    System.out.println(horoscope.getBirthday(birth));
    System.out.print(horoscope.getZodiac(zodiac));
    scanner.close();


}
}

The date prints out fine, but the Zodiac part gives an error. I have also noticed that I need to press enter twice after typing in the date. I am not sure why this is. This is what the console shows for me:

What is your birthday? Type in month and year as two numbers.  Ex. 01 01(January 1st)
02 14

February 14th
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
at java.lang.String.substring(Unknown Source)
at Horoscope.getZodiac(Horoscope.java:246)
at HoroscopeTester.main(HoroscopeTester.java:21)
Was it helpful?

Solution

The problem is the value for the string is out of it's index,i.e if u have initialized a string of size of 10 and you try to store more than 10 of length. This Error is trowed check out the string initialization in the main function and initialize it to a larger size.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top