在java中旋转字符串数组

时间:2012-11-29 22:10:54

标签: java arrays rotation tetris

如何在我正在制作的俄罗斯方块游戏中旋转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;
}

3 个答案:

答案 0 :(得分:1)

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

  1. 为rotate(char [] [])编写一个包装器,将其转换回字符串数组
  2. 修改函数以从输入
  3. 创建新的字符串数组
  4. 创建一个数据结构,以最有效的格式保存数据,然后让getter以您希望的格式返回它。
  5. 3基本上就是你应该做的事情。在俄罗斯方块游戏中,您将创建一个游戏区域大小的矩阵(可能填充)。

答案 1 :(得分: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,将此char(toRotate[rows].charAt(cols))连接到数组returnChar[cols]上的每个字符串returnChar 1}}

答案 2 :(得分: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;
  }