【问题标题】:How to randomly insert String numbers into an array-Java如何将字符串数字随机插入数组-Java
【发布时间】:2018-09-20 02:54:42
【问题描述】:

我这里有这个数组,它接受strings 值这是我的拼图板视图, 现在一切正常,但数组是硬编码的,我需要从0-4 随机生成字符串。 我试图得到一个random char 并把它作为string 但这没有用。任何提示都会很好。

Random rand = new Random();
char c = (char)(rand.nextInt(5) + '0');
StringBuilder sb = new StringBuilder();
sb.append(c);

String[] debug_board_state  = new String[7];
debug_board_state[0] = "0,3,0,0,3,0,2";
debug_board_state[1] = "1,0,2,0,0,1,2";
debug_board_state[2] = "0,2,0,0,0,0,0";
debug_board_state[3] = "0,0,3,0,3,0,4";
debug_board_state[4] = "2,0,0,0,0,1,0";
debug_board_state[5] = "0,1,0,0,1,0,2";
debug_board_state[6] = "2,0,3,0,0,2,0"; 

更新。

感谢用户的回答,我能够得到随机矩阵,虽然我遇到了另一个问题,但我需要对矩阵做更多的事情,所以我不想把它打印出来。这是代码

static private final int WIDTH_EASY = 7;
 protected void InitializeEasy() {
      Random rand = new Random();

      String[][] debug_board_state  = new String[7][7];
      for (int row = 0; row < debug_board_state.length; row++) {
          for (int column = 0; column < debug_board_state[row].length; column++) {
              debug_board_state[row][column] = String.valueOf(rand.nextInt(5));
          }
      }

      for (int row = 0; row < debug_board_state.length; row++) {
          for (int column = 0; column < debug_board_state[row].length; column++) {
              System.out.print(debug_board_state[row][column] + " ");
          }
      };

    for (int i = 0; i < WIDTH_EASY; ++i) {
      StringTokenizer tokenizer = new StringTokenizer (debug_board_state[i][i], ",");
      int column = 0;
      while(tokenizer.hasMoreTokens()) {
    String token = tokenizer.nextToken();
    getCurrentState().board_elements[i][column] = new BoardElement();
    getCurrentState().board_elements[i][column].max_connecting_bridges = Integer.parseInt(token);
    getCurrentState().board_elements[i][column].row = i;
    getCurrentState().board_elements[i][column].col = column;

    if (getCurrentState().board_elements[i][column].max_connecting_bridges > 0) {
      getCurrentState().board_elements[i][column].is_island = true;
    }
    ++column;
      }
    }
  }

字符串 Tokenizer 适用于 1d 数组但不适用于 2d,我需要与 StringTokenizer 执行相同操作并将其应用于矩阵的东西。我收到以下错误

java.lang.NullPointerException: Attempt to read from field Island_and_Bridges.Hashi.BoardElement[][] Island_and_Bridges.Hashi.BoardState$State.board_elements on a null object reference

【问题讨论】:

  • 你为什么不简单地使用String[][] 作为你的板,因为你坚持它是一个字符串?还有,什么没用?弄清楚为什么它不起作用?
  • 二维数组在这种情况下要好得多。您可以使用array[0][0] = "0" 访问它
  • 我从未使用过 2d 数组,您能回答我如何实现这一点吗?

标签: java android arrays random


【解决方案1】:

虽然我认为int[][] 是一个更好的主意,但这里是String[][] 解决方案。您可以使用String.valueOf(rand.nextInt(5)) 在矩阵中生成元素:

import java.util.Random;

public class Main {

    public static void main(String[] args) {
        Random rand = new Random();

        String[][] matrix  = new String[7][7];
        for (int row = 0; row < matrix.length; row++) {
            for (int column = 0; column < matrix[row].length; column++) {
                matrix[row][column] = String.valueOf(rand.nextInt(5));
            }
        }

        for (int row = 0; row < matrix.length; row++) {
            for (int column = 0; column < matrix[row].length; column++) {
                System.out.print(matrix[row][column] + " ");
            }
            System.out.println();
        }
    }
}

更新:

for (int row = 0; row < WIDTH_EASY; ++row) {
    for (int column = 0; column < WIDTH_EASY; ++column) {
        getCurrentState().board_elements[row][column] = new BoardElement();
        getCurrentState().board_elements[row][column].max_connecting_bridges = Integer.parseInt(debug_board_state[row][column]);
        getCurrentState().board_elements[row][column].row = row;
        getCurrentState().board_elements[row][column].col = column;
        if (getCurrentState().board_elements[row][column].max_connecting_bridges > 0) {
            getCurrentState().board_elements[row][column].is_island = true;
        }
    }
}

【讨论】:

  • 这就是我正在寻找的我从未使用过二维数组感谢 m8!
  • StringTokenize 二维数组如何实现,我试过了,但是不行for (int i = 0; i &lt; WIDTH_EASY; ++i) { StringTokenizer tokenizer = new StringTokenizer (debug_board_state[i][i], ",");
  • 要形成一个矩阵,如果我尝试在没有 println() 的情况下打印它们;他们正在排队打印我需要matrix 以列行格式而不是排队如果你找到我
  • 那么我可以用什么来实现这一目标?
  • 我需要向矩阵添加其他内容,这就是为什么我认为我需要对矩阵进行 StringTokenize 以便在不打印出来的情况下以列行格式将其打印出来 tbh 我不需要打印矩阵我需要将它存储在数组变量中
【解决方案2】:

也许,你想要这样的东西:

public void initBoard() {
    Random random = new Random();
    String[][] board = new String[7][7];
    for (int i=0; i < board.size(); i++) {
        for (int j=0; j < board[].size(); j++) {
            board[i][j] = String.valueOf(random.nextInt() % 5);
        }
    }
}

它会用String的随机数初始化你的板子。

【讨论】:

    【解决方案3】:

    0-4 位于 ASCII 刻度上的 49 到 52 之间:

    Random rand = new Random();
    char c = (char)(rand.nextInt(4)+49);
    StringBuilder sb = new StringBuilder();
    sb.append(c+'0');
    

    【讨论】:

    • 我怎么能把它放到我上面的数组中?
    【解决方案4】:

    这样的?

    伪代码:

    String[][] debug_board_state  = new String[7][7];
    
    for (int x = 0; x < debug_board_state.size(); x++) {
         for (int y = 0; y < debug_board_state[x].size(); y++) {
             debug_board_state[x][y] = new_random_character();
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2020-07-28
      • 2014-02-09
      • 1970-01-01
      • 2014-05-13
      • 2019-08-04
      • 2019-03-23
      相关资源
      最近更新 更多