java在for循环之后跳过了我的一些代码

yuvru6vn  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(322)

我试图得到两个集合的并集,但是由于某些原因,我的代码没有错误,但是我得到并集的方法跳过了一些代码

public Set union(Set s){
    Set union = new Set(count+s.count);

    for(int x=0;x<count;x++)
        union.set[x] = set[x];

    for(int y=count;y<s.count;y++){
        union.set[y] = s.set[y];
    }
    return union;
}

程序可以工作,但问题是在第一个循环之后,它跳过了方法中的其余代码。
下面是我的代码的其余部分,可能与这个问题有关

public class Set implements InterfaceSet{
private int set[];
private int count;

public Set(){
        set = new int[max];
        count = 0;
    }

public Set(int size){
    set = new int[size];
    count = size;
}

private int found;
public void add(int e){
    found = 0;
    if(count<10){
        for(int x: set){
            if(x==e){
                found=1;
                break;
            }
        }
        if(found==0){
            set[count] = e;
            count++;
        }
    }
}

public void display( ){
    for(int x=0;x < count; x++){
        System.out.println(set[x]);
    }
}
ki1q1bka

ki1q1bka1#

你的联合方法似乎不正确。你能试试这个吗?

public Set union(Set s){
    Set union = new Set(count + s.count);

    for(int x = 0; x < count; x++)
        union.set[x] = set[x];

    // updated
    for(int y = 0; y < s.count; y++){
        union.set[count + y] = s.set[y];
    }

    return union;
}
k3bvogb1

k3bvogb12#

当你到达第二个环路时, count 将等于第一组的大小,但您正在将其与第二组的大小进行比较。如果第一组与第二组大小相同或大于第二组,则条件 count < s.count 将为false,跳过循环。
对于插入和读取的位置,需要使用不同的索引变量:

public Set union(Set s){
    Set union = new Set(count+s.count);
    int insertPoint = 0; 
    for(int i=0; i<count; i++, insertPoint++) {
        union.set[insertPoint] = set[i];
    }

    for(int i=0; i<s.count; i++, insertPoint++) {
        union.set[insertPoint] = s.set[i];
    }
    return union;
}

这也是通常的惯例 i , j , k ,用于索引变量,除非它们有特定的含义,所以我继续切换 x 以及 yi .

相关问题