Java实现获取指定数值内所有素数的ArrayList 现有代码异常如何修正?
代码存在的问题
- 素数判断逻辑错误:内层循环中你写的是
input%a==0,实际应该判断当前待校验的数值i是否能被a整除,你现在全程都在判断输入的最大值是否为素数,和当前遍历的i完全无关。 - 内层循环上限错误:判断
i是否为素数时,循环上限应该是(int)Math.sqrt(i),而不是(int)Math.sqrt(input+1),判断哪个数的素数属性,上限就和哪个数挂钩。 - 标志位初始化位置错误:
flag变量定义在遍历i的循环外层,每次校验新的i之前没有重置为0,上一轮的校验结果会干扰当前判断,应该把flag的定义放到i的循环内部,每次判断前初始化为0。 - 输出格式不符合要求:当前
Qaytarmaq方法是每个元素单独换行打印,你需要的是逗号分隔的单行输出。 - 补充说明:数学定义上1不属于素数,如果你需要符合通用素数标准,可以去掉1的判断逻辑;你给出的示例包含1,修改代码时保留了该逻辑,输入7时输出为
1,2,3,5,7,完全符合需求。
修改后的完整代码
package com.company; import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int input = scanner.nextInt(); ArrayList<Integer> AYE = new ArrayList<Integer>(); for(int i = 1; i<=input; i++){ int flag = 0; if(i==1 || i==2 || i==3){ AYE.add(i); continue; } for(int a = 2; a<=(int)Math.sqrt(i); a++){ if(i%a==0){ flag = 1; break; } } if(flag==0){ AYE.add(i); } } Qaytarmaq(AYE); } public static void Qaytarmaq(ArrayList<Integer> AYE){ for (int j = 0; j < AYE.size(); j++) { if(j>0){ System.out.print(","); } System.out.print(AYE.get(j)); } } }
内容的提问来源于stack exchange,提问作者Farid Aghazada
相关产品推荐
相关产品推荐

