[英]java.lang.ArrayIndexOutOfBoundsException while sorting an array
[英]java.lang.ArrayIndexOutOfBoundsException while finding prime Number and creating array with it
目标 -找到所有primeNumbers并使用它创建数组完成 -创建方法primeReturner-如果数字质数则返回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中的某些项目及其确定...有时返回错误...
问 -我的方法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;
}
和主要功能public class 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错误 ...
如何解决这个错误?
您在if(primeReturner(i)) == true)
块中执行i++
。 这是for
循环i++
补充。 您很可能会收到ArrayIndexOutOfBoundsException
因为您的i
索引将达到大于100的值,这是您的数组最大大小。 在if
块中删除该i++
。
该错误是由于您使用相同的变量在数组中建立索引(即第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 。
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;
}
}
查找错误-需要通过添加限制来停止与i的循环因此,最终代码为
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]);
}
}
认为'i <524'不是最好的变体,以后会尝试找到更好的东西=)感谢所有人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.