1

我编写了以下代码来查找数组中的最后一个零索引:

public class Stack {
    public static void main(String[] args){
        int[] a=new int[5];
        a[0]=1;
        a[1]=0;
        a[2]=90;
        a[3]=0;
        a[4]=4;
        findLast(a);
    }
    public static int findLast(int[] x){
        for(int i=0;i<x.length;i++){
         if(x[i]==0){
             System.out.println(i);             
         }
        }
        return 0;
    }
}

输出如下:

1
3

我真正想要的是索引 3。

4

6 回答 6

6
  • 从数组末尾开始(即i=x.length-1
  • 递减i而不是递增(即使用i--
  • 一旦达到零就停止(即在break之后添加println)。
  • 使您的停止条件使得循环处理索引为零的元素。
于 2013-02-02T00:28:27.883 回答
3

只需将循环从x.length-1to反转0并在第一次匹配时返回索引:

public static int findLast(int[] x) {
    for (int i=x.length-1; i>=0; i--) {
        if (x[i] == 0) {
            // match found, return index
            return i;
        }
    }
    // no match found, return invalid index
    return -1;
}
于 2013-02-02T00:29:26.907 回答
2
public class Stack {
    public static void main(String[] args){
        int[] a=new int[5];
        a[0]=1;
        a[1]=0;
        a[2]=90;
        a[3]=0;
        a[4]=4;
        findLast(a);
    }
    public static void findLast(int[] x){
        for(int i=x.length()-1;i>0;i++){
        if(x[i]==0){
            System.out.println(i);
            break;
        }
    }
}

}

于 2013-02-02T00:34:16.767 回答
0
public static int lastZero(int[] x){
        int temp=0;
        for(int i=0;i<x.length;i++){
         if(x[i]==0){
             temp=i;
         }
        }
        System.out.println(temp);
        return 0;
    }

这将提供所需的输出。

于 2013-02-02T01:59:14.433 回答
0

从数组的 END 开始并递减。如果我们永远找不到零,这将返回 -1,它总是在索引之外。这是你解释的

public class Stack {
public static void main(String[] args){
    int[] a=new int[5];
    a[0]=1;
    a[1]=0;
    a[2]=90;
    a[3]=0;
    a[4]=4;
    findLast(a);
}
public static int findLast(int[] x){
    for(int i=x.length-1;i>=0;i--){
     if(x[i]==0){
         return i;             
     }
    }
    return -1;
}

}

于 2013-02-02T02:21:42.733 回答
0

如果您的约束是从头开始遍历数组,则将索引存储为当您查看0变量时,并且在完成循环时只需打印变量

int lastindex;
for(int i=0;i<x.length;i++){
         if(x[i]==0){
             lastindex=i;
}
System.out.println(lastindex); 
于 2013-02-02T00:29:41.313 回答