为什么我在intellij中的一个单词索引

jexiocij  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(277)

我需要写一个函数,它将返回数组数据中元素的索引
添加我已经编写的代码:

public synchronized int indexOf(String element) {

    for (String data : data) {

        if (data.equals (element)) {

            indexOf (element);
        }
    }

    return indexOf (element);
}

我在indexof:method上得到了一个亮点 indexOf() 无限递归,只能通过抛出异常结束。。。你会推荐哪种例外情况?先谢谢你。

42fyovps

42fyovps1#

如注解中所述,您的代码不会试图返回位置(int)。它只递归地调用自己,不管是否找到元素。
使用这种方法,您可能希望返回元素内部的正确位置,如果您在其中标识元素,那么您的代码不会跟踪您当前的位置。
我不确定这个问题是否适合于递归,但这是可能的。首先,还有两个非递归的解决方案。
只需调用list.indexof():

public synchronized int indexOf(String element) {
    return data.indexOf(element);
}

迭代:

public synchronized int indexOf(String element) {
    for (int i = 0; i < data.size(); ++i) {
        if (data.get(i).equals (element)) {
            return i;
        }
    }
    return -1;
}

到目前为止,我假设数据是一个列表。如果取而代之的是数组string[],您仍然可以迭代:

public synchronized int indexOf(String element) {
    for (int i = 0; i < data.length; ++i) {
        if (data[i].equals (element)) {
            return i;
        }
    }
    return -1;
}

编辑
递归解决方案:

public synchronized int indexOf(String element) {
    return internalIndexOfRecursive(element, 0);
}

private synchronized int internalIndexOfRecursive(String element, int pos) {
    if(pos >= dataArray.length) {
        return -1;
    }
    if (data[pos].equals(element)) {
        return pos;
    }
    return internalIndexOfRecursive(element, pos + 1);
}

相关问题