假设有两个数组a[],b[],数组元素已知,我想得到a在b中没有的元素,找到一个就可以,该怎么实现?
我老是在退出循环的时候出现异常,代码如下:(我的是4个数组,22分组)
for(int p=0;p<as4.length;p++){
                           for (i = 0; i < temp1.length; i++) {
                               if (!(as4[p].equals(temp1[i]) &&
                                     as5[p].equals(temp2[i]))) {
                                   if (i == temp1.length - 1) {
                                       s4 = as4[p];
                                       s5 = as5[p];
                                       p = as4.length;
                                   }
                               } else {
                                   if (p == as4.length - 1) {
                                       sign = false;                                   }
                                  break;
                               }
                           }
                       }

解决方案 »

  1.   

    内容没有细看,看你的break在第二层循环里就知道不对了,建议写一个独立的方法,
    使用return
      

  2.   


    public class Domo { /**
     * @param args
     */
    public void GetDifferent(Object [] a,Object[] b)
    {
    Object temp;
    System.out.print("数组a中的元素为:");
    for(int i=0;i<a.length;i++){
    System.out.print(a[i]+" ");
    }
    System.out.print("\n数组b中的元素为:");
    for(int i=0;i<b.length;i++){
    System.out.print(b[i]+" ");
    }
    System.out.print("\n数组a在b中没有的元素为:");
    for(int i=0;i<a.length;i++){
    temp =a[i];
    int j=0;
    for(;j<b.length;j++){
    if(temp.equals(b[j])){
    break;
    }
    }
    if(j==b.length){
    System.out.print(temp.toString()+" ");
    }
    }
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Object [] a ={1,2,3,4,5};
    Object [] b ={1,2,4,6};
    new Domo().GetDifferent(a, b);
    }}
      

  3.   

    做一个两重循环是不是就解决问题了,第一重从a中取一个元素,第二重使用a的这个元素,遍历b的所有元素的比较,在比较成功时直接退出for(int i = 0; i < as.length; i++){
      for(int j = 0; j < bs.length; j++){
        if(as[i].equals(bs[j]){
          System.out.println("element at "+i+" in a is existing at "+j+" in b");
          return;
        }
      }
    }
      

  4.   

    上面把题目读错了,重新写做一个两重循环是不是就解决问题了,第一重从a中取一个元素,第二重使用a的这个元素,遍历b的所有元素的比较,记录比较结果,如果成功则打断内循环。在内循环结束后判定是否找到,如果是没有找到则直接返回a的元素即可。for(int i = 0; i < as.length; i++){
    boolean found = false;
    for(int j = 0; j < bs.length; j++){
    found = as[i].equals(bs[j]);
    if(found)
    break;
    }
    if(!found){
    return as[i];
    }
    }
    }
      

  5.   

    不如用Map做
    把b放入Map ,
    然后对a循环,
    如果Map不包含当前a的元素,则直接返回这个元素,没有找到返回null即可。