目标 - 找到所有primeNumbers并使用它创建数组 做了什么 - created method primeReturner - 如果数字为prime,则返回true -
private static boolean primeReturner (int i){
for (int j=2;j<i; j++){
if (i%j==0)
return false;
}
return true;
}
创建了使用素数创建数字的方法
private static void simpleArray() {
int []a = new int [100];
a[0]=1;
a[1]=2;
for (int i=2; i<a.length; i++){
if (primeReturner(i)==true){
a[i]=i;
i++;
}
}
}
问题 - 在创建数组期间我遇到了一些错误 - 数组0中的某些项目有些错误...有时它会返回错误...
Questing - 我的方法simpleArray有什么问题?
稍微修改一下代码 - 现在它识别所有素数并用它创建数组,但是在将第100个项添加到数组后我得到错误
代码
private static void simpleArray() {
int []a = new int [100];
a[0]=1;
a[1]=2;
int count=2;
while (count<100)
for (int i=3; ; ++i){
if (primeReturner(i)==true){
a[count]=i;
count++;
}
}
for (int j=0; j<a.length; j++){
System.out.print(" " + a[j]);
}
}
private static boolean primeReturner (int i){
for (int j=2;j<i; j++){
if (i%j==0)
return false;
}
return true;
}
和主要功能 公共课Exercise_1 { private static int select;
public static void main (String[]args) throws IOException{
System.out.println("Menu:");
....
System.out.println("Array with simple numbers - enter 7");
select = getNumber ();
switch (select){
.....
case 7:{
simpleArray();
}
}
}
结果创建了素数为succsesfull的所有数组 但在打印此数组期间,我得到 java.lang.ArrayIndexOutOfBoundsException错误 ...
如何解决此错误?
答案 0 :(得分:0)
您在i++
区块中if(primeReturner(i)) == true)
。这是for
循环i++
的补充。您最有可能获得ArrayIndexOutOfBoundsException
,因为您的i
索引将达到大于100的值,这是您的阵列最大大小。删除i++
块中的if
。
答案 1 :(得分:0)
错误是由于您在数组中使用相同的变量(即第n个素数的索引)以及素数的值这一事实引起的。因此,如果索引是非素数,则simpleArray
中构造的数组将具有零值,如果它是素数,则值i
将具有零值。如果需要完全打包的数组,则需要第二个索引:
private static void simpleArray() {
int []a = new int [100];
a[0] = 2; // by definition 1 is not prime
int i = 1;
int possible_prime = 3;
while (i < a.length) {
if (primeReturner(possible_prime)) {
a[i++]=possible_prime;
}
possible_prime++;
}
}
关于一个素性的讨论,请参阅Wikipedia。
答案 2 :(得分:0)
for (int i=2; i<a.length; i++){
if (primeReturner(i)==true){
a[i]=i;
i++;
}
}
这就是问题所在......从代码中删除i ++
所以这里:
for (int i=2; i<a.length; i++){
if (primeReturner(i)==true){
a[i]=i;
}
}
答案 3 :(得分:0)
查找错误 - 需要通过添加限制来停止循环 所以,最终的代码是
private static void simpleArray() {
int []a = new int [100];
a[0]=1;
a[1]=2;
int count=2;
while (count<100){
for (int i=3;**i<524** ; ++i){
if (primeReturner(i)==true){
a[count]=i;
count++;
}
}
}
for (count=0; count<a.length; count++){
System.out.print(" " + a[count]);
}
}
认为'我&lt; 524'不是最好的变种,后来会试着找到更好的东西=) 感谢所有人。