Создание объекта [несколько экземпляров одного экземпляра] - PullRequest
0 голосов
/ 20 октября 2010

Я создал объект Matrix (например, математическую Матрицу, например, блок чисел 4x4), и он отлично работает, может отлично задавать строку, столбец, переменную, но я не могу иметь более одного объекта, У меня есть создание ArrayList из дюжины объектов Matrix, каждый с тремя переменными, но когда я вызываю changeVar (Matrix x, переменная int) и обновляю распечатку матрицы, он меняет все числа на то, что я изменил переменную к. Таким образом, похоже, что он просто создает один и тот же экземпляр снова и снова, и если вы меняете его, он меняет их все, я что-то упускаю из виду?

public class Matrices {

    private static int row, col, value, newRow, newCol;

    public Matrices(int row, int col, int value) {
        this.value = value;
        this.row = row;
        this.col = col;
    }

    public static void setRow(int row) {
        Matrices.row = row;
    }

    public static void setValue(int value) {
        Matrices.value = value;
    }

    public static void setCol(int col) {
        Matrices.col = col;
    }

    public static int getCol(Matrices x) {
        return col;
    }

    public static int getRow(Matrices x) {
        return row;
    }

    public static int getValue(Matrices x) {
        return value;
    }

    public static Matrices changeValue(Matrices x, int value) {
        newRow = getRow(x);
        newCol = getCol(x);
        return new Matrices(newRow, newCol, value);
    }
}

Ответы [ 3 ]

4 голосов
/ 20 октября 2010

Проблема в том, что вы используете ключевое слово "static".

Краткий ответ: удалите все статические ключевые слова.

Более длинный ответ заключается в том, что статические поля / методы не связаны.с любым конкретным экземпляром класса, поэтому ваш код устанавливает одно поле с именем "строка", одно с именем "col" и т. д. и использует их для всех экземпляров класса.Что вам действительно нужно, так это одно поле для каждого экземпляра: если сделать поля нестатичными, это будет достигнуто.

В общем, избегайте использования static, если вы действительно не имеете это в виду, т.е.иметь служебный класс, который не должен быть создан.

2 голосов
/ 20 октября 2010

Вы используете статические элементы.Статические члены являются общими для всех экземпляров .

Не делайте этого: удалите ключевое слово static.

Я удивлен, что на * 1007 не было предупреждений* линии ...

Счастливое кодирование

1 голос
/ 20 октября 2010

Модификатор «static» в полях вашего класса (т. Е. Row, col, value, newRow и newCol) означает, что существует одна копия этих переменных на класс, а не на объект.

Далее,вы в настоящее время изменяете эти статические значения в статических методах.Помимо удаления статического модификатора в полях вашего класса, вам необходимо удалить статические модификаторы в ваших методах, а затем получить доступ к атрибутам (полям) объекта, используя «this» (если ваши поля имеют те же имена, что и параметры метода).

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