尝试将Matrix类型的对象转换为int[][]以生成具有随机值的矩阵。在如何执行此操作方面遇到问题。不断收到m2.setMatrixVals([4][3])的错误,例如“表达式的非法开始”、“不是语句”和“”;“预期”。将感谢任何帮助
import java.util.Random;
public class MatrixDemo
{
public static void main(String[] args)
{
Random r = new Random();
Matrix[][] m1 = new Matrix[4][3];
Matrix[][] m2 = new Matrix[4][3];
System.out.println("Matrix A:");
m2.setMatrixVals([4][3]);
for(int i=0;i<4;i++)
{
for(int j=0;j<3;j++)
{
matrixVals[i][j] = r.nextInt(20);
System.out.print(matrixVals[i][j] + "\t");
}
System.out.print("\n");
}
}
}
下面是我的方法类:
public class Matrix
{
//instance fields
private int[][] matrixVals;
public Matrix(int[][] mVals)
{
matrixVals = mVals;
}
public void setMatrixVals(int[][] mVals)
{
matrixVals = mVals;
}
public int[][] getMatrixVals()
{
return matrixVals;
}
}
在如何将setter实现到驱动类中时遇到了麻烦。不知道我做错了什么。
3条答案
按热度按时间q9rjltbz1#
你声明了一个类
Matrix
,它封装了一个二维int数组,然而,在你的main()
方法中,你接着创建了两个Matrix
对象的二维数组(m1
和m2
),这实际上是没有意义的:要么你想封装这个二维数组,要么你不想,到底是哪个?如果你真的想要用
Matrix
类封装一个包含随机数的二维数组(有意义),你可能应该这样做:注意,我将
Matrix
声明为public static
:这是因为我想在一个demo文件中完成所有的工作。如果你要进一步开发这个,把Matrix
放到一个单独的文件中,Matrix.java
放到合适的包中。在这种情况下,删除static
关键字。thtygnil2#
试试这个:
jm81lzqq3#
下面是我可能会如何处理它。
下面的代码非常简单,我只是选择了一些值来表示
int
数组的键大小,并使用一个流来填充它。打印出这样的东西。
这里重要的是使用防御性复制,这样如果提供的数组在类外被更改,它不会更改
Matrix array
。矩阵值只能由setter更改。当检索值时,它们应该被再次复制,这样返回的副本,如果被修改,不会更改矩阵。为了完成复制,我使用了
clone()
方法。它在对象克隆方面有它的问题,但当涉及到原语数组时,它工作得很好。以这种方式制作防御性副本可能看起来代价高昂,但它被认为是一种很好的技术,可以帮助防止意外修改潜入代码。
您可以添加的其他方法包括
toString()
以便可以打印对象。