求指导:如何仅用while循环实现2到n之间的质数查找
用While循环实现2到n之间的质数查找
需求:找出2到用户输入的整数n之间的所有质数,且只能使用while循环,不能使用for循环。以下是原有的for循环实现代码:
import java.util.Scanner; class Main { public static void main(String [] args) { int i; int cont; int n; System.out.print("Enter a number: "); Scanner leia = new Scanner(System.in); n = leia.nextInt(); System.out.println("The prime numbers from 2 to "+n+" are: "); for(int j = 2; j <= n; j++) { cont = 0; for(i = 1;i <= j; i++) { if(j % i == 0) { cont++; } } if(cont == 2) { System.out.print(j+" "); } } } }
转换后的While循环实现代码
把原代码中的两层for循环替换为while循环即可,核心逻辑完全一致:
import java.util.Scanner; class Main { public static void main(String [] args) { int i; int cont; int n; int j = 2; // 初始化外层循环变量 System.out.print("请输入一个整数:"); Scanner leia = new Scanner(System.in); n = leia.nextInt(); System.out.println("2到" + n + "之间的质数是:"); // 外层遍历2到n的数,替换原for循环 while (j <= n) { cont = 0; i = 1; // 每次检查新数时重置内层循环变量 // 内层遍历当前数的所有可能因数,替换原for循环 while (i <= j) { if (j % i == 0) { cont++; } i++; // 内层循环自增 } // 判断是否为质数(因数只有1和自身) if (cont == 2) { System.out.print(j + " "); } j++; // 外层循环自增 } } }
转换说明
- 原外层
for(int j=2; j<=n; j++)拆分为:初始化j=2,while(j<=n)循环体,循环末尾执行j++ - 原内层
for(i=1; i<=j; i++)拆分为:每次外层循环时初始化i=1,while(i<=j)循环体,循环末尾执行i++ - 质数判断逻辑不变:统计当前数的因数个数,若恰好为2(1和自身),则判定为质数
内容的提问来源于stack exchange,提问作者PedroVb
相关产品推荐
相关产品推荐

