Java 有人能帮我找出这个代码的错误吗

Java 有人能帮我找出这个代码的错误吗,java,arrays,Java,Arrays,有人能帮我找出这个代码的错误吗。我正在尝试编写一个函数方法,用于确定整数数组中目标的倒数第二个匹配项。如果不在数组中,则返回-1 public static int findSecondToLast(int [] a, int target) { int [] b = new int[countOfTarget (a,target)]; int k =0; for (int i = 0; i < a.length; i++){ if (a[i]

有人能帮我找出这个代码的错误吗。我正在尝试编写一个函数方法,用于确定整数数组中目标的倒数第二个匹配项。如果不在数组中,则返回-1

public static int findSecondToLast(int [] a, int target) {
    int [] b  = new int[countOfTarget (a,target)];
    int k =0;

    for (int i = 0; i < a.length; i++){
        if  (a[i]==target){
            b[k]=i;
            k++;
            return  b[ countOfTarget (a,target) - 1];
        }
    }

    return -1;
}

public static int countOfTarget (int[]a, int t){
    int count = 0;
    for (int i=0; i < a.length; i++) {
        if (a[i] == t) 
            count++;
    }
    return count;
}
公共静态int findSecondToLast(int[]a,int目标){
int[]b=新int[目标计数(a,目标)];
int k=0;
for(int i=0;i
尝试将代码更改为

public static int findSecondToLast(int[] a, int target)
    {
        int[] b = new int[countOfTarget(a, target)];
        int k = 0;

        for (int i = 0; i < a.length; i++)
        {
            if (a[i] == target)
            {
                b[k] = i;
                k++;
                return b[ countOfTarget(a, target) - 1];
            }
        }
        return -1;
    }
公共静态int findSecondToLast(int[]a,int目标)
{
int[]b=新int[目标计数(a,目标)];
int k=0;
for(int i=0;i

return-1
语句必须在循环的
之外

您需要将函数更改为此函数:

public static int findSecondToLast(int [] a, int target)
{
    int prev = -1;
    int last = -1;
    for (int i = 0; i < a.length; i++)
        if  (a[i] == target)
        {
            prev = last;
            last = i;
        }
    return prev;
}
公共静态int findSecondToLast(int[]a,int目标)
{
int prev=-1;
int last=-1;
for(int i=0;i
如果只需按相反顺序扫描并返回元素的第二个匹配项,则此问题会容易得多:

public static int findSecondToLast(int[] a, int terget) {
    int firstFound = false;
    for (int i = a.length - 1; i >= 0; --i) {
        if (a[i] == target) {
            if (firstFound) {
                return i;
            }
            firsrFound = true;
        }
    }
    return -1;
}

不需要使用
countOfTarget
方法,也不需要在数组中迭代三次(这是您的原始代码所做的)。

问题是…?为了将来的参考,您应该在标题中发布错误或bug。谢谢!:)代码只给出目标的第一次出现,而不是倒数第二次出现。我不明白为什么会这样,我修复了你的编译错误。请尝试使用调试器或在纸上单步执行。@user2909389 for循环中的返回不正确。它应该在循环完成后发生。我也发现了。可惜有人把问题从帖子中删掉了这不是一个正确的解决方案。该方法将第一次返回
a[i]==target
,并且
b[countOfTarget(a,target)-1]
的值将不会被赋值(除非
countOfTarget(a,target)
返回1)。