«Не удается найти символ» при тестировании кода Java - PullRequest
1 голос
/ 25 июля 2010

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

Matrix.java:4: cannot find symbol
symbol  : constructor Matrix(int[][])
location: class Matrix
  Matrix y = new Matrix(x);

Это код, который я пытался скомпилировать:

public class Matrix<E> {
    public static void main(String[] args) {
        int[][] x = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
        Matrix y = new Matrix(x);
        System.out.println(y.getRows());
        System.out.println(y.getColumns());
    } 
    private E[][] matrix;
    public Matrix(E[][] matrix) {this.matrix = matrix;}
    public E[][] getMatrix() {return matrix;}
    public int getRows(){return matrix.length;}
    public int getColumns(){return matrix[0].length;}
}

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

Ответы [ 3 ]

2 голосов
/ 25 июля 2010

Попробуй так:

public class Matrix<E> {
    public static void main(String[] args) {
        Integer [][] x = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {0, 1, 0}};
        Matrix<Integer> y = new Matrix<Integer>(x);
        System.out.println(y.getRows());
        System.out.println(y.getColumns());

        System.out.println("before: " + y);
        Integer [][] values = y.getMatrix();
        values[0][0] = 10000;
        System.out.println("after : " + y);
    }
    private E[][] matrix;
    public Matrix(E[][] matrix) {this.matrix = matrix;}
    public E[][] getMatrix() {return matrix;}
    public int getRows(){return matrix.length;}
    public int getColumns(){return matrix[0].length;}
    public String toString()
    {
        StringBuilder builder = new StringBuilder(1024);
        String newline = System.getProperty("line.separator");

        builder.append('[');
        for (E [] row : matrix)
        {
            builder.append('{');
            for (E value : row)
            {
                builder.append(value).append(' ');
            }
            builder.append('}').append(newline);
        }
        builder.append(']');

        return builder.toString();
    }
}

Компилируется и запускается на моей машине.

Вам нужно подумать о чем-то другом: инкапсуляция и когда "private" не является private Проверьте модификацию кода и посмотрите, как я могу изменить вашу "личную" матрицу.

1 голос
/ 25 июля 2010

Попробуйте использовать Integer[][] вместо int[][]. Ваш конструктор ожидает первое (поскольку нет аргументов примитивного типа), а вы передаете второе.

0 голосов
/ 25 июля 2010

В Java нет создания универсального массива.См. Как создать универсальный массив в Java?

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