2

我将如何在 java 中为我正在制作的俄罗斯方块游戏旋转字符串数组。例如字符串数组

[
"JJJJ",
"KKKK",
"UUUU"
]

会成为

[
"UKJ",
"UKJ",
"UKJ",
"UKJ"
]

我可以使用此代码使用 char 矩阵来做到这一点

public char[][] rotate(char[][] toRotate)
{
    char[][] returnChar = new char[toRotate[0].length][toRotate.length];
    for(int rows = 0; rows<toRotate.length; rows++)
    {
        for(int cols = 0; cols<toRotate[0].length; cols++)
        {
            returnChar[cols][toRotate.length-1-rows]=toRotate[rows][cols];
        }
    }
    return returnChar;
}
4

3 回答 3

1

字符串在 Java 中是不可变的,因此您有几个选择

  1. 为 rotate(char [][]) 编写一个包装器,将其转回字符串数组
  2. 修改函数以从输入创建一个新的字符串数组
  3. 创建一个数据结构,以最有效的格式保存数据,然后让 getter 以您想要的格式返回数据。

3本质上是您“应该”做的事情。在俄罗斯方块游戏中,您将创建一个游戏区域大小的矩阵(可能是填充的)。

于 2012-11-29T22:31:02.097 回答
1

使用 Array String 类似于您所做的:

public static String[] rotate(String [] toRotate)
  {

      String [] returnChar = new String[toRotate[0].length()];
      String [] result = new String[toRotate[0].length()];
      Arrays.fill(returnChar, "");

      for(int rows = 0; rows<toRotate.length; rows++)
          for(int cols = 0 ; cols < toRotate[rows].length(); cols++)
              returnChar[cols] = returnChar[cols] + toRotate[rows].charAt(cols);

      for(int i = 0; i < returnChar.length; i++)
          result[i] =  new StringBuffer(returnChar[i]).reverse().toString();

      return result;
  }

我遍历char每个String数组中的所有内容toRotate,将此字符( )连接到数组上的toRotate[rows].charAt(cols)每个字符串returnChar[cols]returnChar

于 2012-11-29T22:36:22.347 回答
0

该函数完成将字符串转换为的工作,char[][]以便您可以使用您的函数。

  public static String[] rotateString(String[] toRotate) {
    char[][] charStrings = new char[toRotate.length][];
    for(int i = 0; i < toRotate.length; i++) {
      charStrings[i] = toRotate[i].toCharArray();
    }

    // This is YOUR rotate function
    char[][] rotatedStrings = rotate(charStrings);
    String[] returnStrings = new String[rotatedStrings.length];
    for(int i = 0; i < rotatedStrings.length; i++) {
      returnStrings[i] = new String(rotatedStrings[i]);
    }

    return returnStrings;
  }
于 2012-11-29T22:31:35.253 回答