Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程中的Java异常";“主要”;java.lang.StringIndexOutOfBoundsException错误_String_Exception_Range_Main - Fatal编程技术网

线程中的Java异常";“主要”;java.lang.StringIndexOutOfBoundsException错误

线程中的Java异常";“主要”;java.lang.StringIndexOutOfBoundsException错误,string,exception,range,main,String,Exception,Range,Main,我正在编写一个程序,提示你生日(比如02 14),然后用文字打印出你输入的日期,以及该日期的黄道带。这是我的密码 public class Horoscope{ public String getBirthday (String birth) { String month = birth.substring(0, 2); String day = birth.substring(3, 5); if(month.equals("01")) {

我正在编写一个程序,提示你生日(比如02 14),然后用文字打印出你输入的日期,以及该日期的黄道带。这是我的密码

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;
}


}
日期打印出来很好,但黄道带部分给出了一个错误。我还注意到,在输入日期后,我需要按enter键两次。我不知道这是为什么。这是控制台为我显示的内容:

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)

问题是字符串的值超出了它的索引,也就是说,如果您初始化了一个大小为10的字符串,并且尝试存储长度超过10的字符串。此错误会被抛出。请检查主函数中的字符串初始化,并将其初始化为更大的大小

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)