2014-11-18 3 views
0

Я решаю проблему, когда я пытаюсь получить процент символов и произвольно заполнять их в массиве 5x5, используя Math.random для хранения 25 элементов в массиве 2d. Я придумал это прямо сейчас, но я не понимаю, почему он не заполняет символы, которые я хочу. Он выполняет только «X», а не случайным образом, он, похоже, находится в порядке с общим числом X. Я пытаюсь вывести процент от X, O и того, что когда-либо осталось пустым. Он выводит только 10 X, и они, похоже, не рандомизированы. Я был бы признателен за любые советы, которые я могу понять, почему это происходит.Как создать двумерный массив символов со случайными символами?

public static void main(String []args){ 

     char [][] tissue = new char [5][5]; 

     assignCellTypes(tissue,40,40); 

    } 

    public static void assignCellTypes(char[][] tissue,int percentO, int percentX){ 


       double cellx=0.0; 
       double cellO=0.0; 
       double totalO=0; 
       double totalX = 0; 
       totalO = (double)percentO/100; 


       totalX = (double) 
         percentX/100; 

         cellx = totalX *(tissue.length*tissue.length); 
         cellO = totalO *(tissue.length*tissue.length); 

      int i; 
      int j ; 
     for(int row = 0;row<tissue.length;row++){ 
      for(int col = 0;col<tissue[row].length;col++){ 


        if(cellx>0){ 
         i = (int)Math.floor(Math.random()*tissue.length); 
         j = (int)Math.floor(Math.random()*tissue.length); 

         tissue[i][j] = 'X'; 
         System.out.print(tissue[i][j] + " "); 

         cellx--; 

         if(cellO>0 && tissue[i][j] != 'X'){ 
          i = (int)Math.floor(Math.random()*tissue.length); 
          j = (int)Math.floor(Math.random()*tissue.length); 

          tissue[i][j] = 'O'; 
          System.out.print(tissue[i][j] + " "); 
          cellO--; 

        if(tissue[i][j] != 'X' && tissue[i][j] != 'O'){ 

         tissue[i][j] = ' '; 

         System.out.print(tissue[i][j] + " "); 

        } 
         } 



        } 


      } 
      System.out.println(); 
     } 


    } 
} 

ответ

0

Я не знаю точно, что вы пытаетесь АРХИВ, но мне кажется, вы просто пытаетесь заполнить массив символов случайным образом с X и O и случайным фактором, в этом случае есть много более простое решение

public static void assignCellTypes(char[][] tissue, int percentO, int percentX) 
{ 
    double chanceO = percentO/(double) (percentO + percentX); 

    Random r = new Random(); //java.util.Random 

    for(int i=0; i < tissue.length; i++) 
     for(int j=0; j < tissue[i].length; j++) 
      if(r.nextDouble() <= chanceO) 
       tissue[i][j] = 'O'; 
      else 
       tissue[i][j] = 'X'; 
} 

EDIT @comment, я думаю, что это то, что вы хотите достичь:

public static void assignCellTypes(char[][] tissue, int percentO, int percentX) 
{ 
    if(percentO + percentX > 100) 
     throw new Exception("You can't have more than 100%!"); 

    double chanceO = percentO/100d; 
    double chanceX = percentX/100d; 

    Random r = new Random(); //java.util.Random 

    for(int i=0; i < tissue.length; i++) 
     for(int j=0; j < tissue[i].length; j++) 
     { 
      double random = r.nextDouble(); 

      if(random <= chanceO) 
       tissue[i][j] = 'O'; 
      else if(random <= chanceO + chanceX) 
       tissue[i][j] = 'X'; 
     } 
} 
+0

То, что я пытаюсь достичь заполнить массив символов случайным образом с определенной Percenta ge of X и O. Так что, если мой массив может заполнить 25 элементов (массив 5x5), а мой X-процент и O - 40, то 10 O и 10 X, а остальные пять я хочу быть пустыми. Все случайным образом через Math.random(). Я получаю случайный способ использования, я пытаюсь сделать это через Math.random(). Я не понимаю, почему в моем коде печатаются только X, но не случайно, а не O. –

+0

@NickCage Причина в том, что это только печать X, потому что код проверяет, если cellx> 0, а затем записывает X случайным образом, делает cellx--, а затем проверяет, нет ли в месте, где вы только что написали X, X и начинается снова до тех пор, пока cellx не станет меньше 1. После этого он просто зацикливается, не делая ничего. Вы должны отформатировать код немного лучше, он довольно нечитабелен в текущем состоянии. Я внесла некоторые изменения в свой ответ, пожалуйста, проверьте, работает ли мой код для вас. – Gelunox

+0

Нет, он не в форме сетки и печатает 30 символов в массиве 5x5 2d. –

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