2016-01-28 21 views
-3

這是我的代碼的一部分。我想首先給矩陣羣[] []分配隨機數,然後將隨機數與特定數ranP相比較,如果羣[] [] < ranP,則將羣[] []重新分配給1,否則爲0但它顯示Java Matrix如何將int 1或0賦值給2D數組?

arrayindexoutofboundsexception 0 

在這個問題上需要幫助。謝謝!

  randGen = new Random(); 
      double randNum = randGen.nextDouble(); 

      for (int i = 0; i < 11; i++){ 
       for (int k = 0; k < inipopulationsize; k++){ 
        for (int j = 0; j < 25; j++){ 



         ranP = 0.5; 
         //TMaxtrix[i][j] = matrix[i][j]; 
         System.out.println(matrix[i][j] + " "); 
         population = new double[k][j]; 
         System.out.println("randNum: " + randNum); 
         population[k][j] = randNum; 
         if (randNum <= ranP){ 
          population[k][j] = 1; 
         } 
         else 
          population[k][j] = 0; 
         System.out.println("population: " + population[k][j]); 

        }//j loop 


       }//k loop 

      }//i loop 

我正在自己學習,並沒有採取任何類。如果這真的讓你「專家」困擾,爲什麼你不要忽略並節省你的時間回家看電影或花更多的時間與你的家人?感謝這裏好人的幫助。但對只知道諷刺的你感到羞恥。這是什麼最後工作:

  randGen = new Random(); 
      population = new int[inipopulationsize][25]; 

      for (int i = 0; i < population.length; i++){ 

        for (int j = 0; j < population[i].length; j++){ 
         double randNum = randGen.nextDouble(); 
         ranP = 0.5; 
         if (i < 11){ 
         //System.out.println(matrix[i][j] + " "); 
         } 

         if (randNum <= ranP){ 
          population[i][j] = 1; 
         } 
         else 
          population[i][j] = 0; 
        //System.out.println("population index: " + i + " Dieasease index: " + j + " DI on (1) or off (0): " + population[i][j] + ""); 

        }//j loop 


      }//i loop 
+0

你**必須閱讀[問] ** – Amit

+1

請更新你的代碼,以顯示你如何實例化變量的人口和矩陣 – OYRM

+0

這是很不清楚你在這裏做什麼。請編輯您的問題,以清楚說明您的最終目標是什麼。它是一個隨機分佈的1和0的二維數組還是這種數組的矩陣?這有點難以分辨。 – River

回答

1

是第三個循環,因爲你想要我的2D數組?如果是這樣,你應該看看二維數組的ArrayLists。

 int inipopulationsize = 25; 
     double[][] population; 
     Random randGen = new Random(); 
     double randNum = randGen.nextDouble(); 
     double ranP = 0.5;// outside loops 
     population = new double[inipopulationsize][25]; // out 


      for (int k = 0; k < inipopulationsize; k++){ 
       for (int j = 0; j < 25; j++){ 

        randNum = randGen.nextDouble();//i assume you want new random every time 

        if (randNum <= ranP){ 
         population[k][j] = 1; 
        } 
        else 
         population[k][j] = 0; 
       }//j loop 
      }//k loop 
System.out.println(Arrays.deepToString(population)); 
1

我沒有看到一個2d數組有3個循環的原因。

Random randGen = new Random(); 
double randNum; 
for(int i=0; i<population.length; i++){ 
    for(int j=0; j<population[i].length; j++){ 
     randNum = ranGen.nextDouble(); 
     if(randNum<0.5) population[i][j] = 0; 
     else population[i][j] = 1.0; 
    }//j loop 
}//i loop 
1

你的問題是,你是指一個項目的你的二維數組的邊界。

讓我們來看看你的代碼。此行:population = new double[k][j];宣佈了一個新的尺寸爲k x j的二維數組。然後在此行中:population[k][j] = randNum;您嘗試引用同一2D數組的第k列和第j行中的項目。 這在Java數組中不合法。

Java數組是0索引的,這意味着對於大小爲k的數組,索引範圍從0k-1。沒有項目在索引k。這就是爲什麼你收到索引超出界限的錯誤。

Please look at this link instructing you on the basic use of Java Arrays.

確切的錯誤arrayindexoutofboundsexception 0出現,因爲在你的第一次迭代中,您可以通過創建0 0大小的羣體。然後您嘗試訪問列0和行爲0的項目,也就是說,在第一項。但是,由於您的人口數組的大小爲0,因此它沒有空間,甚至索引0也超出範圍。


但是,我甚至不確定這是你想要做的。

你正在聲明一個二維數組你的循環的每個迭代。如果你所要做的只是製作一個大小爲inipopulationsize,25(這些是kj的初始值)的單個數組,那麼你需要在這兩個嵌套循環的之外聲明這個。也許甚至在第三個循環之外,因爲我甚至不知道該循環在做什麼。

anaxin's answer爲例,如何有效地將0和1隨機分配到人口數組中。 (由於randP設置爲0.5,您可以給出50%的出現機會。)