2013-09-01 207 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