如何实现Matrix类的flipVertically方法并返回矩阵对象?
解答你的Matrix垂直翻转问题
让我来帮你逐个解决这两个问题:
问题1:报错原因与修复方案
你遇到的Matrix required but array found错误,主要有两个直接原因,还有一个隐藏的语法问题:
错误原因
- 对象访问方式错误:
newArray是Matrix类的实例对象,不是二维数组,你不能直接用newArray[row][column]这种数组索引的方式访问它的元素——因为Matrix内部的array是私有成员变量,就算是类内方法,也不能把对象当数组直接操作。 - 数组索引越界+逻辑错误:
array[size1][size2]本身就是错误写法——Java数组索引从0开始,size1是矩阵总行数,最大行索引是size1-1;size2是总列数,最大列索引是size2-1,这里不仅会触发数组越界异常,而且完全不符合你想要的“对应原矩阵元素”的逻辑。 - 隐藏语法问题:你的
flipVertically方法定义在了Matrix类外面,这不符合Java语法,必须把它放到Matrix类内部作为成员方法,才能访问类的私有成员array、size1、size2。
修复后的完整代码
我调整了方法位置,并且实现了正确的垂直翻转逻辑:
public class Matrix { private final int[][] array; private final int size1; private final int size2; Matrix(int size1,int size2) { this.size1=size1; this.size2=size2; this.array=new int[size1][size2]; } Matrix(int[][] color) { this.size1=color.length; this.size2=color[0].length; this.array= new int[size1][size2]; for(int row=0;row<size1;row++) { for(int column=0;column<size2;column++) { this.array[row][column]=color[row][column]; } } } // 将方法移到类内部作为成员方法 public Matrix flipVertically() { // 创建存储翻转结果的二维数组 int[][] flippedArray = new int[size1][size2]; for(int row=0; row < size1; row++) { // 新数组的第row行,对应原数组的倒数第row+1行(即size1-1-row行) for(int column=0; column < size2; column++) { flippedArray[row][column] = array[size1 - 1 - row][column]; } } // 用翻转后的数组创建新Matrix对象返回 return new Matrix(flippedArray); } }
问题2:返回“Matrix变量”的含义与形式
返回“Matrix变量”其实就是返回一个Matrix类的实例对象。
在Java中,Matrix是你定义的类(相当于一个模板),而“Matrix变量”就是根据这个模板创建出来的具体对象——它包含了自己的array数组、size1和size2属性,是一个完整的、可以正常使用的矩阵实例。
你代码里的return newArray;就是返回Matrix变量的标准形式:先创建一个符合要求的Matrix对象(比如上面修复后的代码里,我们用翻转后的数组生成了新的Matrix),然后用return关键字把这个对象返回给调用方,调用方拿到这个对象后,就能像使用其他Matrix实例一样操作它。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

