如何使用递归找到数组的最后一个元素?

时间:2019-04-20 15:37:42

标签: java arrays recursion

我想要做的就是使getLastElement(char [] array)使用递归返回数组的最后一个元素。此方法只能通过使用array [0]访问索引0。 我可以使用Arrays.copyOfrange。 我只能修改isSymmetric内部的代码和getLastElement内部的代码。

我已经尝试了以下方法来访问索引0,但是在查找数组的最后一个元素时遇到了问题。

代码:



    public static char getLastElement(char[] array) {
        if (array == null || array.length == 0)
            throw new NullPointerException();

        if(array.length == 1) {
            return array[0];
        } else {
            return getLastElement(Arrays.copyOfRange(array, 1, array.length));
        }
    }



    public static boolean isSymmetric(char[] array) {
        if (array == null)
            throw new NullPointerException("Null argument.");

        if(array.length <= 1) return true;


        if(getLastElement(array) == array[array.length -1])


            return isSymmetric(Arrays.copyOfRange(array, 1, array.length-1));

        return false;
    }
}

我只希望它返回数组的最后一个元素,并且希望它只能访问array [0]。

4 个答案:

答案 0 :(得分:1)

选中此一项:

    public static char getLastElement(char[] array) {
        //CANNOT be modified
        if (array == null || array.length == 0)
            throw new NullPointerException();

        //This code can be modified
        if(array.length == 1) {
            return array[0];
        } else {
            return getLastElement(Arrays.copyOfRange(array, 1, array.length));
        }
    }

如果数组只有一个元素,我们将其返回。否则,我们将在前一个数组的索引1处传递数组开始的数组副本。

答案 1 :(得分:0)

public static char getLastElement(char[] array) {
    //CANNOT be modified
    if (array == null || array.length == 0)
        throw new NullPointerException();

    //This code can be modified 
    try{
        return getLastElement(Arrays.copyOfRange(array,1,array.length));
    }catch (NullPointerException ex){
        return array[0];
    }

}

它不适用于空数组-然后将抛出空指针,但我想还可以。我已经假设您不能将数组的长度用于不同的用途,然后使用copyOfRange

答案 2 :(得分:0)

isSymmetric函数的第4行中有一个错误。 将if(getLastElement(array) == array[array.length -1])更改为if(getLastElement(array) == array[0])

答案 3 :(得分:0)

我不确定您为什么需要复制任何内容。只需增加每次递归的索引

public static char  getLastElement(char[] array) {  
   if(array == null) throw new RuntimeException("array should be initialized");  
   return getLastElement(array, 0);  
}

private static char getLastElement(char array, int index) {  
   if(index == array.size() - 1) {
      return array[index];
   }  
   return getLastElement(array, index + 1);
}