title: Crossword algorithm for Android using Java
body: <p>I am working on cross word algorithm to develop a word app. After doing a lot of googling or search on StackOverflow, I was able to reach this point. But yet I am not able to understand the right implementation for algorithm in Java. Below is the class I used.</p>
  
  <pre><code>public class Crosswords {
  
      char[][] cross;
      int rows;
      int cols;
      char[][] numberGrid;
      boolean startword;
      final char DEFAULT = ' ';
  
      public Crosswords() {
          rows = 50;
          cols = 50;
          cross = new char[rows][cols];
          numberGrid = new char [rows][cols];
          for (int i = 0; i &lt; cross.length;i++){
              for (int j = 0; j &lt; cross[i].length;j++){
                  cross[i][j] = DEFAULT;
              }
          }
      }
  
      public Crosswords(int ros, int colls) {
          rows = ros;
          cols = colls;
          cross = new char[rows][cols];
          numberGrid = new char [rows][cols];
          for (int i = 0;i &lt; cross.length; i++){
              for (int j = 0; j &lt; cross[i].length; j++){
                  cross[i][j] = DEFAULT;
              }
          }
      }
  
  
      public String toString() {
               String s = new String();
              //String d = new String();
          for (int i = 0; i &lt; rows; i++) {
           for (int j = 0; j &lt; cols; j++){
            s = s + cross[i][j] + " ";
              }
            s = s + "\n";
          }
          return s;
      }
  
  
      public void addWordh(String s, int r, int c) {
  
          int i = 0;
  
          int j = 0;
  
          boolean b = true;
  
          boolean intersectsWord = true;
  
  
          if (s.length() &gt; cols) {
  
              System.out.println(s + " is longer than the grid. Please try another word.");
  
              return;
  
          }
  
          if (c + s.length() &gt; cols) {
  
              System.out.println(s + " is too long. Please try another word.");
  
              return;
  
          }
  
          if ((r - 2) &gt;= 0) {
  
              if ((cross[r - 1][c - 1 + s.length()] == DEFAULT) || (cross[r - 1][c - 1 + s.length()] == '*')) {
                  intersectsWord = false;
              }
  
              else { intersectsWord = true;}
  
              if (intersectsWord == true) {
                  System.out.println("The word " + s + " intersects the beginning of another word!");
                  return;
              }
          }
  
          for (i = 0; i &lt; s.length(); i++) {
  
              if ((cross[r - 1][c - 1 + i] == DEFAULT) || (cross[r - 1][c - 1 + i] == s.charAt(i))) {
  
                  b = true;
  
              }
  
              else {
  
                  b = false;
  
                  System.out.println("Unable to add " + s + ". Please try another word.");
  
                  return;}
  
          }
  
          if (b == true) {
  
              if ((s.length() &lt;= cols) &amp;&amp; (c + s.length() &lt;= cols) &amp;&amp;
  
                      (cross[r - 1][c - 1] == s.charAt(0)) || (cross[r - 1][c - 1] == DEFAULT)) {
  
                  while (j &lt; s.length()) {
  
  
                      cross[r - 1][c - 1 + j] = s.charAt(j);
  
                      if (j==0){
                          startword = true;
                      }
  
                      cross[rows - 1 - (r - 1)][cols - 1 - (c - 1 + j)] = '*';
  
                      j++;
  
                  }
  
              }
  
          }
  
      }
  
      public void addWordv(String s, int r, int c) {
  
          int i = 0;
  
          int j = 0;
  
          boolean b = true;
  
          boolean intersectsWord = true;
  
          if (s.length() &gt; rows) {
  
              System.out.println(s + " is longer than the grid. Please try another word.");
  
          }
  
          if (r + s.length() &gt; rows) {
  
              System.out.println(s + " is too long. Please try another word.");
  
          }
  
          else {
  
              if ((r - 2) &gt;= 0) {
  
                  if ((cross[r - 2][c - 1] == DEFAULT) || (cross[r - 2][c - 1] == '*')) {
  
                      intersectsWord = false;
  
                  }
  
                  else { intersectsWord = true;}
  
                  if (intersectsWord == true) {
  
                      System.out.println("The word " + s + " intersects the end of another word!");
  
                      return;
  
                  }
  
              }
              if ((cross[r - 1 + s.length()][c - 1] == DEFAULT) || (cross[r - 1 + s.length()][c - 1] == '*')) {
                  intersectsWord = false;
              }
  
              else { intersectsWord = true;}
  
              if (intersectsWord == true) {
                  System.out.println("The word " + s + " intersects the end of another word!");
                  return;
              }
  
  
              for (i = 0; i &lt; s.length(); i++) {
  
                  if ((cross[r - 1 + i][c - 1] == DEFAULT) || (cross[r - 1 + i][c - 1] == s.charAt(i))) {
  
                      b = true;
  
                  }
  
                  else {
  
                      b = false;
  
                      System.out.println("Unable to add " + s + ". Please try another word.");
  
                      return;}
  
              }
  
              if (b == true) {
  
                  if ((s.length() &lt;= rows) &amp;&amp; (r + s.length() &lt;= cols) &amp;&amp;
  
                          (cross[r - 1][c - 1] == s.charAt(0)) || (cross[r - 1][c - 1] == DEFAULT)) {
  
                      while (j &lt; s.length()) {
  
                          cross[r - 1 + j][c - 1] = s.charAt(j);
  
                          if (j==0){
                              startword = true;
                          }
  
                          cross[rows - 1 - (r - 1 + j)][cols - 1 - (c - 1)] = '*';
  
                          j++;
  
                      }
  
                  }
  
              }
          }
  
      }
  
      public void setNumberGrid(){
          numberGrid = new char [rows][cols];
          for (int i = 0; i &lt; cross.length; i++){
              for (int j=0; j &lt; cross[rows].length; j++){
                  if (cross[i][j] == DEFAULT){
                      numberGrid[i][j] = (char) 0;
                  }
                  else if (startword == true){
                      numberGrid[i][j] = (char) -2;
                  }
                  else {
                      numberGrid[i][j] = (char) -1;
                  }
              }
              int count = 1;
              for (i=0; i &lt; cross.length; i++){
                  for (int j=0; j &lt; cross[rows].length; j++){
                      if (numberGrid[i][j] == -2){
                          numberGrid[i][j] = (char)count;
                          count++;
                      }
                  }
              }
          }
      }
  
      public String printNumberGrid() {
          for (int i=0; i &lt; cross.length; i++){
              for (int j=0; j &lt; cross[rows].length; j++){
                  if (numberGrid[i][j] == (char)-1){
                      numberGrid[i][j] = ' ';
                  }
                  else if (numberGrid[i][j] == (char)0){
                      numberGrid[i][j] = '#';
                  }
              }
          }
          String d = new String();
          for (int i = 0; i &lt; rows; i++) {
              for (int j = 0; j &lt; cols; j++){
                  d = d + numberGrid[i][j] + " ";
              }
              d = d + "\n";
          }
          return d;
      }
  
  
  
      public static void main(String[] args) {
          Crosswords g = new Crosswords();
          g.addWordv("rawr", 4, 5);
          g.addWordh("bot", 5, 4);
          g.addWordv("raw", 7, 5);
          g.addWordh("cat", 4, 5);
          g.addWordh("bass", 6, 10);
          System.out.println(g);
  
          Crosswords c = new Crosswords(20, 20);
  
          c.addWordh("HELLO", 1, 1);
  
          c.addWordv("HAPLOID", 1, 1);
          c.addWordh("COMPUTER", 3, 12);
  
          c.addWordv("CAT", 2, 11);
  
          c.addWordv("WOAH", 2, 20);
          c.addWordh("PARKING", 20, 5);
  
          c.addWordv("ARK", 17, 6);
          c.addWordh("AHOY", 6, 18);
          c.addWordv("AHOY", 18, 10);
          c.addWordv("ADVANTAGE", 2, 12);
          c.addWordv("INTERNAL", 2, 18);
          c.addWordh("BANTER", 7, 11);
          c.addWordv("BEAGLE", 5, 12);
          c.addWordh("BASE", 8, 3);
          c.addWordv("BALL", 8, 3);
          c.addWordh("LEFT", 10, 3);
          c.addWordv("SAFE", 8, 5);
          System.out.print(c);
      }
  }
  </code></pre>
  
  <p>As you can see in Main method that i am adding the words but also giving the row and column number to place the words like <strong>c.addWordv("Safe",8,5);</strong> where 8 and 5 is column number.</p>
  
  <p>Now <strong>Question</strong> is how can i implement cross word algorithm which just take words and place them on board randomly without taking the row and column numbers.
  Thanks in advance  </p>
  
  <p><strong>EDIT:</strong><br>
  I want to modify this class algo the way that i dont have to give away the rows and columns number..</p>