ArrayIndexOutOfBoundsException为“十二天的圣诞节”赋值与字符串数组

时间:2013-12-10 13:22:47

标签: java string indexoutofboundsexception

我被分配编写一个程序,打印歌词“圣诞节的十二天”而不使用循环(递归是可以的)我认为我有它但我一直收到这个

java.lang.ArrayIndexOutOfBoundsException: -1

我已经修改了我的if语句和编号,但我问了几个朋友,我似乎无法查明问题。

public class TwelveDays{
public static void main(String[] args){
    Twelve_Days(0);
}

public static void Twelve_Days (int day){
    String[] days = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"};

    System.out.println("On the " + days[day] + " day of Christmas my true love game to me ");
    Twelve_Gifts(day);

    day++;
    //if(day <=12);

    if(day < 12){
        Twelve_Days(day);
    }
}

public static void Twelve_Gifts(int n){
    String[] gifts = {"A partridge in a pear tree", "Two turtle doves", "Three French hens",
                      "Four Calling birds", "Five golven rings", "Six geese a-laying",
                      "Seven swans a-swimming", "Eight maids a-milking", "Nine ladies dancing",
                      "Ten lords a-leaping", "Eleven pipers piping", "Twelve drummers drumming"};

    System.out.println(gifts[n]);

    if(n < 12){
        Twelve_Gifts(n-1);
    }
}
}

当然感谢任何帮助,非常感谢!

3 个答案:

答案 0 :(得分:3)

if (n < 12) {
    Twelve_Gifts(n - 1);
}

应该是:

if (n > 0) {
    Twelve_Gifts(n - 1);
}

您从n中减去1,因此您要先检查n是否为正。

答案 1 :(得分:1)

你应该设置一个contion来停止递归。

n ==0时,你应该停止它。

了解以下代码在n == 0时会发生什么:

          if (n < 12) {
            Twelve_Gifts(n - 1);
    }

n - 1 = -1,然后gifts[n]变为gifts[-1],从而导致Exception

 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

更改

public static void Twelve_Gifts(int n) {

public static void Twelve_Gifts(int n) {

    if(n ==0)
    {
        return;
    }

您将避免java.lang.ArrayIndexOutOfBoundsException: -1

的例外情况

答案 2 :(得分:0)

你的问题在于Twelve_Gifts方法 - 一旦你到达了“梨树上的鹧”,你就不会阻止它再次出现