Java构建无向图的for循环卡顿不退出,仅执行4次就停止整个程序
问题根因
你代码中的边读取循环边界设置错误,是导致程序无报错卡住的直接原因:
- 你已经通过
edges变量获取了输入中边的总数量,但是实际写边录入逻辑时,错误使用节点数nodes作为循环上限 Scanner的nextInt()方法在没有更多输入可读时,会进入阻塞等待状态,不会抛出异常,表现就是程序停住无响应。
数值对应验证
你本次测试用例的参数:
- 节点数
nodes=6,边数edges=5 - 代码要求循环6次读取边,每次读2个整数,算上开头读取的
nodes和edges,总共需要读取14个整数 - 但你的测试输入总共只有12个整数,读完所有输入后第6次循环等待新输入,程序自然卡住。
修复方案
仅需要修改边录入循环的判断条件,把循环上限从nodes换成edges即可:
// 原错误代码 // for (int i = 0; i < nodes; i++){ // 修复后代码 for (int i = 0; i < edges; i++){ a = in.nextInt()-1; b = in.nextInt()-1; graph[a].add(b); graph[b].add(a); System.out.println(i); }
内容的提问来源于stack exchange,提问作者clcos
相关产品推荐
相关产品推荐

