任何人都可以帮我找到这段代码有什么问题。我试图编写一个函数方法,确定整数数组中目标的最后一次出现。如果不在数组中则返回-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;
}
答案 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;
}