【问题标题】:How do I find the last element of an array using recursion?如何使用递归找到数组的最后一个元素?
【发布时间】:2019-04-20 15:37:42
【问题描述】:

我想要的只是让 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;
    }
}

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

【问题讨论】:

  • 我知道这是一个家庭作业或学习练习,但这太荒谬了,令人震惊。在现实生活中,我们永远不会使用递归来访问 array 的最后一个元素,这就是索引的用途。也许如果它是一个链表,我会理解的。教师应该停止提出这种无意义的问题。

标签: java arrays recursion


【解决方案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 开始的数组副本。

【讨论】:

  • 这给了我错误。我将添加所有代码和输出以查看它是什么。
  • 我在示例输入数组上检查了它并且它工作正常,所以调用该方法的代码肯定有问题。
  • 我编辑了这篇文章。错误数是 4,而应该是 0。我不明白为什么会出错:/
【解决方案2】:

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

【讨论】:

  • 只能访问索引 0
【解决方案3】:
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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      相关资源
      最近更新 更多