Изменение статической ссылки из нестатического поля?

У меня есть частный массив int, и мне нужно как-то найти длину, но я не могу сделать это в статическом классе. Я должен сохранить класс статическим, есть ли другой метод, который я могу добавить, чтобы изменить a.length на что-то другое?

Проблема вызвана a.length.

private int [] a;

public static IntegerSet union(IntegerSet otherSet, IntegerSet nextSet) {

                for(int i=0; i<a.length; i++) {
                  if (otherSet.isSet(i))
                    nextSet.insertElement(i);
                }

                return nextSet;
              }

person user1874549    schedule 04.12.2012    source источник


Ответы (4)


Как я сказал, используйте

public int lenghtOfArray(){
      return this.a.lenght;
}

и измените свой метод на

public static IntegerSet union(IntegerSet otherSet, IntegerSet nextSet) {
      for(int i=0; i<otherSet.length(); i++) {
           if (otherSet.isSet(i))
                nextSet.insertElement(i);
           }
           return nextSet;
      }
person Shamis Shukoor    schedule 04.12.2012

Либо сделайте a также статическим, либо передайте экземпляр вашего класса в качестве аргумента методу union и получите доступ к полю a этого экземпляра.

person rob mayoff    schedule 04.12.2012

Вам нужно сослаться на поле объекта:

private int [] a;

public static IntegerSet union(IntegerSet otherSet, IntegerSet nextSet) {
    . . .
    for(int i=0; i<otherSet.a.length; i++) {
        . . .
    }
}
person Ted Hopp    schedule 04.12.2012

Вы не имеете в виду a.length из статического класса; вы делаете это из статического метода. Статический метод никогда не может ссылаться на нестатические переменные-члены.

Похоже, что у вас есть ошибка там. Зачем тебе идти против a.length? Вы должны узнать о a члене otherSet или nextSet.

person Isaac    schedule 04.12.2012