有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

调试我在java方法中找不到返回素数数组的错误。

它只使用素数来检查其他数字是否也是素数

static public int[] primeGen(int a){

    int[] series={2};

    if (a==1 || a==2 || a<=0){
        return series;
    }   

这就是错误发生的地方

    else{

        boolean Prime = false;

        for (int i = 3; i<=a; i++){

            boolean[] state = {};

            for (int j = 0; !(state[state.length-1]) && (j<series.length); j++){
                state = Arrays.copyOf(state, state.length +1);
                state[state.length -1] = i % series[j] ==0;
            }

            for (int k = 0; (Prime) && (k<state.length); k++){
                Prime = !(state[k]);
            }

            if (Prime){
                series = Arrays.copyOf(series, series.length +1);
                series[series.length -1] = i;
            }
        }
        return series;
    }
} 

抱歉,如果我刚刚犯了一个新手错误,因为我已经学习Java三天了


共 (2) 个答案

  1. # 1 楼答案

    您的state数组已初始化为空数组,因此!(state[state.length-1])尝试访问该数组的无效索引(-1)

  2. # 2 楼答案

    这条线

    for (int k = 0; (Prime) && (k<state.length); k++){
    

    这意味着只有Prime为true时才会执行循环。但是,您已经将Prime初始化为false,并且只在循环中将其设置为true

    看起来您正在使用数组。copyOf以增加输出数组的大小。你可以用向量。改为add(),JVM将处理所需的任何大小调整