理解构造函数和“这个”

时间:2012-03-03 06:05:33

标签: java constructor this

我正在学习构造函数,而且我在很大程度上理解它们,但我不能理解它。我也完全不了解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(...);
        }
    }

2 个答案:

答案 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