2013-09-01 115 views
-3

此程序给我的数组超出范围例外:100 如何解决?也告诉我我的打印方法是否正确?数组越界异常:100

import java.util.Random; 
    import java.lang.Math;  

    class MersennePrime { 

     public int[] MersennefindPrime() {  
      int i=0;  
      int k=0;  
      int array[] = new int[100];  
      for(i=2;i<100;i++)  
      {  
       int count=0;   
       for(int j=2;j<=Math.sqrt(i);j++ )   
       {    
        if(i%j==0)    
        {        
        }        
        else     
        {    
         array[k]=i;     
         k++ ;    
        }   
       }  
      }  
      return array; 
     }   

    } 


    public class MersenneRandomNumbers 
    { 
     public static void main(String[] args)  
     {      
      MersennePrime mrn = new MersennePrime();   
      int array[] =mrn.MersennefindPrime();  
      for(int s=0;s<=array.length;s )   
       System.out.println("array is " array[s]); 
      } 
     } 
    } 
+1

请格式化您的代码。 – rocketboy

回答

4

for(int s=0;s<=array.length;s )   
    System.out.println("array is " array[s]); 
} 

应该是这样的

for(int s=0; s<array.length; s++) {  
    System.out.println("array is " + array[s]); 
} 

注意从<=<的变化!

在您的代码中,在最后一个循环s等于array.length,这只是数组边界之外的第一个索引。

EDIT

除了上部句法错误,有一个逻辑一在这里。在MersennefindPrime()外循环运行从0到100,而内循环运行(“最坏情况”)从2到10.所以可能会有大约10 * 100次,你增加k,并尝试设置各自的索引在阵列。这比你分配数组的100个项目多得多!

如果在初始化时无法确定数组的范围,请使用某个类,该类实现接口List。那么这可能是这样的:

public List<Integer> MersennefindPrime() { 
     ArrayList<Integer> array = new ArrayList<Integer>(); 
     for(int i=2;i<100;i++) 
     { 
      for(int j=2;j<=Math.sqrt(i);j++ ) 
      { 
       if(i%j==0) 
       { 
       } 
       else 
       { 
        array.add(i); 
       } 
      } 
     } 
     return array; 
    } 

你将不得不在主要调整代码()据此!

+0

该代码还有两个错误。它甚至不会编译。 – Jesper

+0

@Jesper你说得对。我只是专注于例外,并没有注意到其他错误。太多的c/p在答案上不好, - ) – Sirko

+0

缺少'{'in for循环。 – isvforall