任何人都可以帮我找到这个代码有什么问题

时间:2013-10-23 01:12:43

标签: 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]==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;
}

3 个答案:

答案 0 :(得分:3)

尝试将代码更改为

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

return-1语句必须在for loop

之外

答案 1 :(得分:1)

如果您只是以相反的顺序扫描并返回第二次出现的元素,则此问题会轻松得多:

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方法,也不需要遍历数组三次(这是原始代码所做的)。

答案 2 :(得分:0)

您需要将功能更改为此功能:

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