在尝试使用 Java 进行快速查找时,我遇到了问题。在 main 函数中,while 循环之后的代码没有被执行,即使它看起来不像是无限循环的情况。添加完整的代码和示例输入和输出。
更新:- hasNext() 的阻塞性问题,hasNext() 一直在等待输入。在给出所有输入后使用Ctrl+Z
while
来终止流,这有助于在循环后处理剩余的代码
以下是完整代码(有问题) -
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