【问题标题】:Randomly place 1D string array into 2D char array将一维字符串数组随机放入二维字符数组
【发布时间】:2019-08-04 23:00:20
【问题描述】:

我正在尝试将一维字符串数组随机放入二维字符数组中,但我的 for 循环出现问题。 userWords 是 String 的一维数组,而uzzleBoard 是 char 的二维数组。

我试过了

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 个字符而不是 3 个字符字符串打印到 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


【解决方案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);
     }
  }

你应该添加一些东西来检测这个位置是否已经有一个单词,否则如果随机数指向一个已经写过单词的位置,你就会覆盖它。

【讨论】:

  • 有效!我太难了,谢谢。是的,我打算在此之后立即这样做
【解决方案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);
       }
    }

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 2018-08-22
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多