我被分配编写一个程序,打印歌词“圣诞节的十二天”而不使用循环(递归是可以的)我认为我有它但我一直收到这个
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);
}
}
}
当然感谢任何帮助,非常感谢!
答案 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方法 - 一旦你到达了“梨树上的鹧”,你就不会阻止它再次出现