2016-02-07 2 views
-2

У меня есть 2 двумерных массива, один заполняется и один должен быть заполнен, оба одного размера (n x m). Мне нужно заполнить [некоторые случайные]% моего второго массива с теми же значениями, что и мой первый массив. Так скажемКак заполнить [x]% массива 2d со значениями другого массива

int[][] arr1 = new int[][] {{0, 1, 0, 1}, 
          {1, 0, 1, 0}, 
          {0, 0, 1, 1}, 
          {1, 1, 0, 0}}; 

Я хочу arr2 быть заполнен на 25% значениях arr1 в том же месте, с другим пятно просто оставаясь пустым ..

int[][] arr2 = new int[4][4]; 
// where arr2 = something like {{0,1,0,1}, 
//        { , , , }, 
//        { , , , }, 
//        { , , , }} 

В конце концов, программа призовет пользователь может заполнить недостающие значения, которые я могу сделать, по какой-то причине эта часть, похоже, не хочет работать для меня. Это для школьного задания, и учитель не очень помогает при ответе на вопросы.

Вот мой код: отметить, что (имена переменных на французском языке ..)

  1. nbCases = общее число элементов в 2d массив
  2. nbARemplir = количество элементов во 2-м массиве иметь значения, присвоенные им (на основе nbCases * nbPourc где nbPourc процент 2-го массива должны быть присвоены значения)
  3. решетка [] [] = исходный массив
  4. гуй = второй «массив» (это на самом деле 2d массив JButtons tha т учитель wrote..syntax добавить значение: gui.setValeur (I, J, значение))

    int nbCases = grille.length * grille[0].length; 
    int nbARemplir = (int)(nbCases * nbPourc); 
    
    do{ 
        for(int i = 0; i < grille.length; i++) { 
         for(int j = 0; j < grille[i].length; j++) { 
          if(rand.nextInt(2) == 1 && nbARemplir > 0) { 
           gui.setValeur(i, j, "" + grille[i][j]); 
           nbARemplir--; 
          } 
         } 
        }  
    } while(nbARemplir > 0); 
    

Спасибо за вашу помощь! :)

ответ

0

Поскольку вы произвольно выбираете значения, вы можете проходить через 2D-массив несколько раз (из-за вашего while-loop). Поэтому вы, вероятно, будете устанавливать значение в одном и том же индексе (i, j) несколько раз, но вы все равно декрементируете nbARemplir.

Теперь, я не знаю, какой тип графический интерфейс есть, но вы могли бы изменить, если-заявление на что-то вроде

if(gui[i][j] != null && rand.nextInt(2) == 1 && nbARemplir > 0)... 

Это гарантирует, что вы не собираетесь положить в то же значение/объекта в два раза ,

+0

Он сказал, что gui представляет собой 2D-массив JButtons fyi –

+0

Ye, но это не похоже на нормальный массив из-за этой строки: 'gui.setValeur (i, j," "+ решетка решетки [i] [j ]); ' – Xerillio

+0

это технически нормальный массив - всего 2d массив JButtons в объекте (GUI) с именем gui. –

Смежные вопросы