Понимание конструкторов и «это» - PullRequest
1 голос
/ 03 марта 2012

Я учу конструкторов и понимаю их по большей части, но я не должен понимать это достаточно. Я также не понимаю this полностью. Но этот код ниже должен использовать эти конструкторы:

конструктор по умолчанию, который будет использоваться для заполнения матрицы случайными числами

конструктор, который принимает объект File, который указывает на файл содержащий матрицу,

конструктор, который принимает строку, которая содержит имя файла

конструктор, который принимает значение типа Matrix и создает его копию

конструктор, который принимает 2D-массив и копирует его значения

И еще, наряду со статическим методом умножения. Я должен использовать команды из main. Но я не совсем понимаю, как использование String в качестве единственного параметра сделает конструктор, о котором ему сказано, а также другие, такие как конструктор по умолчанию, который заполняет массив случайными значениями типа double. Я думаю, что я должен использовать 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 голосов
/ 03 марта 2012

Ключевое слово this относится к текущему объекту в конструкторе или методе, то есть объекту, чей конструктор или метод вызывается.Внутри конструктора вы также можете использовать this для вызова другого конструктора в классе.

Обратитесь к http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html для ясного объяснения из Java Tutorials.

0 голосов
/ 03 марта 2012

В конструкторе или методе 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 волшебным образом не знает, что делать с данными, передаваемыми в разные конструкторы. То, что вам нужно сделать, это написать код в каждом методе, чтобы результирующий объект был одинаковым. (Технически это не обязательно, но это хорошая форма (обычно перегруженные конструкторы предназначены для установки значений по умолчанию или для простоты использования другими программистами))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...