为何1-100数值限制代码未生效且被跳过?
Java质数判断代码的输入限制与逻辑错误修复
问题分析
你的代码存在三个关键问题,导致输入限制失效且质数判断逻辑完全错误:
- 输入范围判断逻辑矛盾:
num <= 0 && num > 100没有任何数值能同时满足这两个条件,应该用||(或运算符)判断num < 1 || num > 100。 - 范围判断位置错误:你把输入合法性判断放在了质数判断的分支里,只有当质数判断不成立时才会触发,但此时非法输入已经进入了质数计算逻辑,应该先验证输入合法性,再执行质数判断。
- 质数判断核心逻辑错误:
num % 1 == 00永远为真(任何数模1余数都是0),导致count的值等于输入的num,永远无法触发质数的判断条件(count == 2),正确的逻辑是遍历i时判断num % i == 0,统计能整除num的因数数量。
修正后的基础版本代码
import java.util.Scanner; public class PrimeChecker { public static void main(String[] args) { System.out.println("introduza um numero entre 1 e 100: "); // 提示输入1-100之间的数 Scanner sc = new Scanner(System.in); int num = sc.nextInt(); // 先判断输入是否合法,非法直接提示并结束 if (num < 1 || num > 100) { System.out.println("Reler enunciado"); // 提示重新查看题目要求 sc.close(); return; } int count = 0; // 遍历1到num,统计因数个数 for (int i = 1; i <= num; i++) { if (num % i == 0) { count++; } } // 判断是否为质数 if (count == 2) { System.out.println("É número primo"); // 是质数 } else { System.out.println("Não é número primo"); // 不是质数 } sc.close(); } }
进阶优化:循环获取合法输入
如果想让用户输入非法数值时重复提示,直到输入合法为止,可以用do-while循环实现:
import java.util.Scanner; public class PrimeChecker { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num; // 循环获取输入,直到合法为止 do { System.out.println("introduza um numero entre 1 e 100: "); num = sc.nextInt(); if (num < 1 || num > 100) { System.out.println("Reler enunciado"); } } while (num < 1 || num > 100); int count = 0; for (int i = 1; i <= num; i++) { if (num % i == 0) { count++; } } if (count == 2) { System.out.println("É número primo"); } else { System.out.println("Não é número primo"); } sc.close(); } }
内容的提问来源于stack exchange,提问作者Fernando Curado
相关产品推荐
相关产品推荐

