我正在学习构造函数,而且我在很大程度上理解它们,但我不能理解它。我也完全不了解this
。但是下面的代码应该使用这些构造函数:
默认构造函数,用于使用随机双精度填充矩阵
构造函数,它接受一个指向文件的File对象 包含矩阵,
构造函数,它接受一个字符串,其中包含文件名
构造函数,它接受Matrix类型的值,并复制它
构造函数,它接受一个2D数组,并复制其值
还有一些,以及静态乘法方法。我应该使用main
中的命令。但我不太明白如何使用String作为唯一的参数将执行它所告知的构造函数,以及其他类似于默认构造函数,用随机双精度填充数组。我想我应该在代码中使用this
,但我不太确定。
我主要只需要能够设置一个矩阵,用随机双精度填充m1矩阵,再用m2矩阵再做,然后用静态乘法方法将它们相乘,然后输出得到的矩阵。谢谢。
(只是抬头,我使用3乘3矩阵,最初我应该将矩阵的大小设置为文本文件中找到的矩阵,但我也可以指定我想要的大小,我是。对于凌乱的代码感到抱歉。当我试图弄清楚这些东西的时候,所有这些都混乱了。我害怕进一步改变它。)
public class Matrix {
double A[][] = new double[3][3]
// Matrix file name
public Matrix(String name) {
this(new File(name));
}
// Matrix random fill
public Matrix() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
this.A[i][j] = (min + Math.random() * (max - min));
}
// Matrix copy
public Matrix(double[][] A) {
private double[][] arrcopy = new double[3][3];
private double[][] array = new double[3][3];
array = A;
for(int i = 0; i < 3; ++i){
for(int j = 0; j < array[i].length; ++j) {
arrcopy[i][j] = array[i][j];
}
}
}
// Set array from text file
public Matrix(File a) {
File f = a;
Scanner inputStreamOne = null;
try{
inputStreamOne = new Scanner(f);
}
catch(FileNotFoundException e){
System.out.printf("Error\n");
}
double arrayOne[][] = new double[3][3];
while(inputStreamOne.hasNextInt()) {
for(int i = 0; i < 3; ++i){
for(int j = 0; j < arrayOne[i].length; ++j){
arrayOne[i][j] = inputStreamOne.nextInt();
}
}
inputStreamOne.close();
}
}
// Gets array in file from string name
public Matrix(String a) {
String inputOne = a;
Scanner inputStreamOne = null;
try{
inputStreamOne = new Scanner(new File(inputOne));
}
catch(FileNotFoundException e){
System.out.printf("Error\n");
}
while(inputStreamOne.hasNextInt()){
for(int i = 0; i < size; ++i){
for(int j = 0; j < arrayOne[i].length; ++j){
arrayOne[i][j] = inputStreamOne.nextInt();
}
}
inputStreamOne.close();
}
}
public static multiply
public static void main(String args[]) {
Matrix m = new Matrix("matrix1.txt");
Matrix m2 = new Matrix("matrix2.txt");
Matrix r = Matrix.multiply(m, m2);
r.output(...);
}
}
答案 0 :(得分:0)
在构造函数或方法中this
引用当前对象。在构造函数中,如果你只使用一个裸this
(也就是说this
之后没有.method
)那么它引用同一个对象的另一个构造函数,它具有不同的类型签名。
与Java中的任何函数一样,构造函数可以重载。也就是说,由于Java的类型系统,只要具有不同的类型签名,就可以拥有多个同名的函数。
class Foo {
public Foo ( String arg ) {
this(arg, "World");
}
public Foo ( String arg1, String arg2 ) {
// do stuff with arg1 and arg2
}
}
在上面的例子中,一个构造函数接受一个字符串而另一个构造函数接受两个字符串。 Java不会神奇地知道如何处理传递给不同构造函数的数据。您需要做的是在每个方法中编写代码,以便生成的对象相同。 (从技术上讲,你不必这样做,但它是好的形式(通常重载的构造函数用于设置默认值或者易于使用其他程序员))
答案 1 :(得分:0)
this
关键字引用构造函数或方法中的当前对象,即调用其构造函数或方法的对象。在构造函数中,您还可以使用this
来调用类中的另一个构造函数。
有关Java教程的详细说明,请参阅http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html。