Java提取数字各位并筛选质数数字的代码调试求助
问题排查与修正
你的代码核心问题是变量i和c没有在每次处理单个数字位时重置:
i和c在循环外初始化,第一次处理完个位数字后,i会保留上一次循环结束后的数值,后续处理十位、百位时,内层循环的起始值不对,直接跳过判断;c会累计之前所有数字的因数计数,导致质数判断逻辑完全失效。
修正后的代码
import java.util.Scanner; public class PrimeDigits { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n, d; System.out.println("Enter a number"); n = in.nextInt(); // 用字符串拼接结果,保证输出格式为逗号分隔 StringBuilder result = new StringBuilder(); while (n > 0) { d = n % 10; int i = 1; int c = 0; // 判断当前数字是否为质数 while (i <= d) { if (d % i == 0) { c++; } i++; } // 质数的因数只有1和自身,即c==2;同时自动排除0和1(非质数) if (c == 2) { if (result.length() > 0) { result.append(", "); } result.append(d); } n = n / 10; } // 输出最终结果 System.out.println(result); in.close(); } }
关键修改点
- 将
int i=1, c=0;移到外层while循环内部,每次处理新的数字位时,重置因数计数器和循环变量; - 添加
StringBuilder拼接结果,保证输出格式和示例一致(如输入762输出7, 2); - 自动过滤0和1:这两个数的因数计数
c不会等于2,符合质数定义(大于1的自然数,仅能被1和自身整除)。
内容的提问来源于stack exchange,提问作者Mayank Vikash
相关产品推荐
相关产品推荐

