如何改写质数判断程序代码?程序存在输入无响应及无输出问题
质数判断程序的问题修复
原代码存在几个关键问题,导致无法正常输入和输出结果,以下是问题分析和修复方案:
问题分析
- 输入提示未显示:使用
System.out.print输出提示时,输出缓冲区未自动刷新,用户看不到输入提示,误以为无法输入。 - 质数判断逻辑颠倒:当数字能被整除(
num%i==0)时,说明不是质数,但原代码错误输出"Is prime"。 - 无限循环:输出结果后未终止循环,会持续重复输出同一内容。
- 边界值处理冗余:0、1这类非质数的判断放在循环内,完全可以提前处理,减少无效循环。
修复后的代码
import java.util.Scanner; public class PrimeChecker { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = 0; int i = 2; boolean isPrime = true; // 用println自动换行并刷新缓冲区,确保用户看到提示 System.out.println("请输入要判断的数字:"); num = sc.nextInt(); // 提前处理边界值:0、1不是质数 if (num <= 1) { System.out.println("不是质数"); sc.close(); return; } // 循环判断到平方根即可,优化性能 while (i <= Math.sqrt(num)) { if (num % i == 0) { isPrime = false; break; // 找到因数后立即终止循环 } i++; } // 根据标记输出结果 System.out.println(isPrime ? "是质数" : "不是质数"); sc.close(); } }
修复说明
- 改用
System.out.println输出提示,自动刷新缓冲区,确保用户能看到输入提示。 - 新增
isPrime布尔标记,统一管理判断状态,避免逻辑混乱。 - 找到因数后立即
break终止循环,避免无限输出。 - 提前处理0、1的情况,无需进入循环;循环只判断到数字的平方根,优化性能。
- 最后关闭Scanner资源,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Pokyes Kromtit
相关产品推荐
相关产品推荐

