You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:45:03