2

在尝试使用 Java 进行快速查找时,我遇到了问题。在 main 函数中,while 循环之后的代码没有被执行,即使它看起来不像是无限循环的情况。添加完整的代码和示例输入和输出。

更新:- hasNext() 的阻塞性问题,hasNext() 一直在等待输入。在给出所有输入后使用Ctrl+Zwhile来终止流,这有助于在循环后处理剩余的代码

以下是完整代码(有问题) -

public class UF {

private int[] id;   

public UF(int n){
    this.id = new int[n];
    for(int i = 0; i < n; i++){
        this.id[i]=i;
    }
}

public boolean connected(int p, int q){
    return(id[p] == id[q]);
}

public void union(int p, int q){
    System.out.println("enter union");
    int pid = id[p];
    int qid = id[q];

    for(int i = 0; i < id.length; i++){
        if(id[i] == pid){
            id[i] = qid;
        }
    }
    System.out.println("Leave union");      
}

public void display(){
    System.out.println("This is what we got");
    for(int i = 0; i < id.length; i++){
        System.out.println(i + " => " + id[i]);
    }
}

// Main method
public static void main(String[] args) {
    Scanner in  = new Scanner(System.in);

    int n = in.nextInt();
    UF uf1 = new UF(n);
    int count = 0;

    while(in.hasNext())
    {
        //System.out.println("here again");
        int p = in.nextInt();
        int q = in.nextInt();
        uf1.union(p, q);
        count++;
        System.out.println(count);
    }
    in.close();

    /*********************************/
    /* BELOW MESSAGE IS NOT PRINTING */ 
    /*********************************/
    System.out.println("out of while");     
}
}

样本输入 ->

10
4 5
6 7
8 9
9 7

对应输出->

enter union
Leave union
1
enter union
Leave union
2
enter union
Leave union
3
enter union
Leave union
4
4

0 回答 0