随机将1D字符串数组放入2D字符数组中

问题描述 投票:3回答:2

我试图将1D字符串数组随机放入2D字符数组中,但我的for循环问题。 userWords是String的1D数组,而puzzleBoard是char的2D数组。

我试过了

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

but it's not placing it randomly like I want it to

所以我试过了

    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个char而不是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
java arrays random
2个回答
3
投票

你可以尝试这个:

  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个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);
       }
    }
© www.soinside.com 2019 - 2024. All rights reserved.