它仅使用素数来检查其他数字是否也是素数
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;
}
}
很抱歉,如果我犯了一个菜鸟错误,因为我已经学习了3天的Java
答案 0 :(得分:2)
您的state
数组初始化为空数组,因此!(state[state.length-1])
会尝试访问数组的无效索引(-1)。
答案 1 :(得分:0)
这一行
for (int k = 0; (Prime) && (k<state.length); k++){
表示只有Prime为真时才会执行循环。但是,您已将Prime初始化为false,并且仅在循环内将其设置为true。
看起来您正在使用Arrays.copyOf来增加输出数组的大小。您只需使用Vector.add(),JVM就可以处理所需的任何调整大小。
答案 2 :(得分:0)
现在工作正常!
我的错误是我不知道for循环根本不会启动如果中间的语句为(int j = 0; (Prime)&amp;&amp;(j&lt;)< / strong>; j ++){}不是真的。我认为这只会在每次重复结束时进行检查。无论如何,如果没有你们指出这些陈述没有加起来,我就不会意识到这一点,所以非常感谢!
boolean Prime = false;
for (int i = 3; i<=a; i++){
boolean[] state = {};
for (int j = 0; (j<series.length); j++){
state = Arrays.copyOf(state, state.length +1);
state[state.length -1] = i % series[j] == 0;
//This is where I added my statement that breaks the loop
if (!(state[state.length-1]==false&&j<series.length)){break;}
}
for (int k = 0; (k<state.length); k++){
Prime = !(state[k]);
//As well as here
if (!(Prime==true&&k<state.length)){break;}
}
if (Prime == true){
series = Arrays.copyOf(series, series.length +1);
series[series.length -1] = i;
}
}
return series;
}
}