【问题标题】:2D array conversion (an integer to a string)二维数组转换(整数到字符串)
【发布时间】:2020-05-31 09:05:26
【问题描述】:

我正在编写游戏代码。该游戏的棋盘尺寸为 10x10。一开始,我把这个板子写成一个二维整数数组。现在我必须用字母替换黑板上的一些地方。它会根据玩家输入的坐标随字母变化。

private static int[][] board = new int[10][10]; //board

StringBuilder sb = new StringBuilder();
    for (int[] array : board) {
        sb.append('\n').append(Arrays.toString(array));
    }
    String new = sb.toString(); //I tried to convert this way

if (new[x][y].equals("r")){
    new[x][y] = "d"; //I'm getting an error in this part.
}

【问题讨论】:

  • 为什么不从一开始就使用字符串数组呢?所以在第一行你会有 private static String[][] board = new String[10][10];然后你必须相应地改变其他类型的方法
  • “新”字符串变量不是二维数组。所以我们不能像使用 [x][y] 改变整数二维数组一样改变值。
  • 不能使用java关键字作为变量,为什么在数组中存储数值时要检查alpha?
  • @anon 尝试使用 2D String 数组复制 2D int 数组板数据。如我的回答所示。

标签: java arrays


【解决方案1】:

尝试使用 2D String 数组,通过从 2D int 数组复制数据。

int[][] board = new int[10][10]; //board

//Converting int array to String array
String[][] s = new String[board.length][];
for(int i = 0; i < board.length; i++){
    s[i] = new String[board[i].length];
    for(int j=0; j<board[i].length; j++){
        s[i][j] = Integer.toString(board[i][j]); 
    }
}

if (s[x][y].equals("r")){
    s[x][y] = "d"; 
}

【讨论】:

    【解决方案2】:

    我建议您不要使用int 作为数组数据类型。也许使用String,您可以使用Integer.parseInt(x) 从数组条目中提取整数。如果您的号码是个位数,使用char 会是更好的选择。

    如果您想这样做,您将不得不执行大量字符串操作,并且您必须使用字符串来存储整个电路板。您可能想阅读this post 来帮助您像二维数组一样索引字符串。

    【讨论】:

      【解决方案3】:

      你的代码有两个主要问题:

      1. 你使用了new作为变量名,这是不允许的,因为new是保留字,用于实例化。
      2. 以下语句不会产生二维字符串数组:

        String s = sb.toString();
        

        因此,您尝试访问/设置s[x][y] 将导致编译错误。

      建议:

      1. 使用String[][] 代替int[][]String[][] 将能够存储由字母组成的字符串以及表示为字符串的整数(如果需要,您始终可以使用 Integer::parseInt 将其解析为相应的整数)。
      2. 创建另一个类型为String[][] 的数组并将int[][] 数组的元素复制到其中。

        我会选择前者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-08
        • 2019-01-23
        • 2015-01-21
        • 2016-07-09
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        相关资源
        最近更新 更多