# Project II: Transform Matrix

你将要创建一个类Transformation.java，并在这个类里设计两个静态方法，对一个二维数组进行相应变换：

* transform()
* convert()

两个方法的的签名和功能如下所示：

1. **public static int\[]\[] transform(int\[]\[] matrix)**

transform方法会对二维数组的元素进行修改，修改规则如下所示：

* 假设i和j分别表示matrix元素的行下标和列下标
* 如果i和j相等，matrix\[i]\[j]变为元素值的平方
* 否则，如果i+j是奇数，matrix\[i]\[j]变为(i+j)和元素值乘积的相反数
* 否则，如果i+j是偶数，matrix\[i]\[j]变为(i-j)和元素值乘积的绝对值
* 最后返回更新后的矩&#x9635;**`newMatrix`**。<mark style="color:orange;">matrix矩阵需要保持不变。</mark>

Example:

<div align="left"><figure><img src="https://1730460162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwc27wmKfnoDuqA5F9f2t%2Fuploads%2FYPx9xzhF69NETS1L9cyp%2Fimage.png?alt=media&#x26;token=777ee23a-80e1-458e-a6e9-10a7c4eba239" alt=""><figcaption></figcaption></figure></div>

经过变换后，**`newMatrx`**&#x5982;下所示：

![](https://1730460162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwc27wmKfnoDuqA5F9f2t%2Fuploads%2F8iiqBGTZvJ6FUGald53n%2Fimage.png?alt=media\&token=9678636c-49b1-420c-b8f2-564b39218680)

2\. **public static int\[]\[] convert(int\[]\[] matrix)**

将二维数组的行列互换的操作称为转置。例如，一个二维数组matrix如下所示：

![](https://1730460162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwc27wmKfnoDuqA5F9f2t%2Fuploads%2FzKEjtGjjiDqzHOOshicq%2Fimage.png?alt=media\&token=7033e442-53f0-4544-9907-ed8fb165bc8e)

将数组转置后，新的二维数组数组如下所示：

![](https://1730460162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwc27wmKfnoDuqA5F9f2t%2Fuploads%2FCoKaPgSWHweBWdwoT4eP%2Fimage.png?alt=media\&token=9cbf7633-2ca0-4327-a117-adb8cc261816)

可以发现，原数组的第一行变成了新数组的第一列，第二行变成了第二列...第n行变成了新数组的第n列。

最后将转置后的数组沿着中心垂直翻转，得到最终矩&#x9635;**`newMatrix`**&#x5E76;返回。

![](https://1730460162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fwc27wmKfnoDuqA5F9f2t%2Fuploads%2Fk1Xpn8AW2SFEEeCy5WXH%2Fimage.png?alt=media\&token=f5fb0a80-710e-4112-b7e2-29cd9d8b7e7a)

原数组matrix依然保持不变。

{% hint style="info" %}
如果转置后的矩阵列数为奇数，中间一列保持不变（如示例所示）。

如果转置后的矩阵列数为偶数，每一列都要进行翻转。
{% endhint %}

### 任务&#x20;

1. 在Transformation中实现transform()方法。
2. 在Transformation中实现convert()方法。
3. 在main()中测试两个函数。每个函数至少要准备两组数据测试。
