Java指定范围内质数查找程序异常求助:输入1-20仅输出1、2、3
解决质数范围查找程序的输出异常问题
问题根源分析
你的代码存在两个核心问题,导致输出异常:
- 标记变量
fl定义在外部循环外,一旦被设为1后不会自动重置,后续所有数字的判断都会错误沿用这个标记值。 - 错误将1判定为质数,不符合质数的定义(质数是大于1的自然数,且仅能被1和自身整除)。
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Enter the range : "); int n1 = sc.nextInt(); int n2 = sc.nextInt(); for (int i = n1; i < n2; i++) { // 每个数字判断前重置标记 int fl = 0; // 跳过小于2的数(非质数) if (i < 2) { continue; } // 优化内层循环:只需遍历到sqrt(i),减少无效计算 for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { fl = 1; break; // 找到因数后直接终止循环,提升效率 } } if (fl == 0) { System.out.println(i); } } sc.close(); // 关闭输入流,规范资源管理 } }
关键修改说明
- 将
fl的声明移至外层循环内部,确保每次判断新数字时标记都从0开始。 - 添加
i < 2的判断逻辑,直接跳过1及更小的数,避免错误输出。 - 内层循环优化为遍历到
Math.sqrt(i):若数字i存在大于其平方根的因数,必然对应一个小于平方根的因数,以此减少循环次数。 - 找到因数后立即
break内层循环,无需继续无效判断。
测试输入1到20时,正确输出为:
2 3 5 7 11 13 17 19
内容的提问来源于stack exchange,提问作者Dhruva
相关产品推荐
相关产品推荐

