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