#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);
}
}