Случайным образом поместить массив 1D строк в массив 2D символов

#java #arrays #random

#java #массивы #Случайный

Вопрос:

Я пытаюсь случайным образом поместить массив 1D string в массив 2D char, но у меня возникают проблемы с моим for-циклом. userWords — это 1-мерный массив строк, в то время как puzzleBoard — это 2-мерный массив символов.

Я пытался

 for(int i=0; i<userWords.length;i  ) {
        puzzleBoard[r  ] = userWords[i].toCharArray(); 
    }
  

но он не размещает его случайным образом, как я хочу

Итак, я попытался

     for(int i=0; i<userWords.length;i  ) {
        int r = rand.nextInt(ROW)   1;
        int c = rand.nextInt(COLUMN)   1;
        puzzleBoard[r][c] = userWords[i].charAt(i);
    }
  

но он печатает только 3 символа вместо 3 строк char в массив char.

Я также пытался

     puzzleBoard[r][c] = userWords[i].toCharArray();
  

вместо

     puzzleBoard[r][c] = userWords[i].charAt(i);
  

Но отображается ошибка «не удается преобразовать из char[] в char»

Спасибо

Полный код

 public static void main(String[] args) {
    String[] userWords = new String[3];
    Methods.userInput(userWords); //ask user for input 
    Methods.fillPuzzle(puzzleBoard); //fill the puzzle with random char

    for(int i=0; i<userWords.length;i  ) {
        int r = rand.nextInt(ROW)   1;
        int c = rand.nextInt(COLUMN)   1;
        puzzleBoard[r][c] = userWords[i].charAt(i);
    }

    Methods.printPuzzle(puzzleBoard); //print out the puzzle

}//end main 


public static void printPuzzle(char a[][]) {

    for (int i = 0; i < a.length; i  ) {
        for (int j = 0; j < a[i].length; j  ) {
            System.out.print(a[i][j]   " ");
        }
        System.out.print((i 1));
        System.out.println();
    }

}//end printPuzzle

public static void fillPuzzle(char a[][]) {

    for (int i = 0; i < a.length; i  ) {
        for (int j = 0; j < a[i].length; j  ) {
            a[i][j] = '*';
        }
    }
}//end fillPuzzle

public static void userInput(String a[]) {
    Scanner input = new Scanner(System.in);

    for(int i = 0; i < a.length;i  ) {
        System.out.println((i 1)   ". enter word:");
        a[i] = input.next().toUpperCase();
    }
}//end userInput
  

Комментарии:

1. Можете ли вы предоставить полный код?

Ответ №1:

Вы можете попробовать это:

   for (int i = 0; i < userWords.length; i  ) {
     int r = rand.nextInt(puzzleBoard.length);
     int c = rand.nextInt(puzzleBoard[r].length - userWords[i].length());
     for (int j = 0; j < userWords[i].length(); j  ) {
        puzzleBoard[r][c   j] = userWords[i].charAt(j);
     }
  }
  

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

Комментарии:

1. Это работает! У меня были такие трудные времена, спасибо. И да, я планирую сделать это сразу после

Ответ №2:

Я думаю, вам следует использовать 2 цикла for, потому что вы хотите сначала выбрать строку, а затем символы в строке.

     for(int i=0; i<userWords.length;i  ) {
       int r = rand.nextInt(ROW)   1;
       int c = rand.nextInt(COLUMN)   1;
       for (int j = 0; j < userWords[i].length(); j  ) {
          puzzleBoard[r][c   j] = userWords[i].charAt(j);
       }
    }