2016-04-12 1 views
0

У меня есть список объектов, в которых используется имя списка, и у него есть «n» количество объектов, называемых занятостями. Каждый объект занятости имеет переменную с именем serialnumber. Теперь мне нужно увеличивать SERIALNUMBER для каждого объекта на 11.Приращивание значения каждого объекта на 11 из списка

Здесь находится код

for(Employment employment:employments.getEmployemnts()){ 
    if(employment="GENERAL_MANAGER"){ 
    employement.setSerialNumberForGenManager() 
    }else{ 
    employment.setSerialNumberForOthers() 
    } 

Внутри employment класса:

public static employemntIndex=11; 

public employemnt setSerialNumberForGenManager(){ 
this.serialNumber = 0; 
} 

public employemnt setSerialNumberForOthers(){ 
this.serialNumber = employemntIndex+serialNumber; 
} 

Теперь, я не в состоянии увеличивать значения на 11 . Результат для каждого объекта всегда равен 11. Он не увеличивается.

+0

Прежде всего, вы не можете сравнивать объект 'Employment' и объект' String'; Во-вторых, для сравнения вам нужно использовать '==', а не '='; И, в-третьих, каково начальное значение 'this.serialNumber' для каждого элемента до запуска цикла? –

+0

это ноль перед циклом для каждого объекта – divya

+0

Так что я смущен. Если это 0, и вы добавите 11, почему бы им не стать 11? –

ответ

0

Попробуйте нравится эта

public static Integer employemntIndex = 0; 

    public employemnt setSerialNumberForOthers(){ 
     this.serialNumber = employemntIndex; 
     employemntIndex += 11; 
    } 
+0

сейчас, я получаю значения как 11,22,22 - для других. Но я получаю 11,22,33 .. – divya

+0

@divya вы можете обновить код, как вы создаете объекты – SANN3

+0

это тот же код, кроме объект занятости имеет переменную, объявленную как public int serialNumber. – divya

0

двух возможных ошибок:

  1. Вы используете так называемый "улучшенный петли".

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

    Для редактирования элементов вам необходимо использовать цикл for с явным индексом итерации или итератором.

  2. Вы, кажется, сравнивая эталонный (адрес памяти с String, который вряд ли соответствует адресу памяти.

    employment="GENERAL_MANAGER" 
    

    Вы, наверное, забыли назвать геттер, как

    employment.getRole().equals("GENERAL_MANAGER") 
    

Так было бы (если метод size() не поддерживается, вы должны использовать array.length)

for(int i = 0; i < employments.getEmployemnts().size(); i++) { 
if(employments[i].yourGetter().equals("GENERAL_MANAGER")){ 
    employements[i].setSerialNumberForGenManager() 
}else{ 
    employments[i].setSerialNumberForOthers() 
} 

Или, если ваша коллекция реализует интерфейс List

Iterator iter = employments.getEmployments().iterator(); 
while (iter.hasNext()){ 
    Employment employment = iter.next(); 
    if(employment.yourGetter().equals("GENERAL_MANAGER")){ 
    employement.setSerialNumberForGenManager() 
    }else{ 
     employment.setSerialNumberForOthers() 
    } 
} 

Надежда, которая помогла

Edit: , как KookieMonster заметил вы используете оператор присваивания в условии, если вы должны использовать метод Equals

+0

Im неспособно использовать job.setSerialNumberForOthers() this direct.beacuse моя реализация цикла изменилась.Я хочу вызвать setSerialNumberForGenManager mtd для работодателя – divya

+0

Просьба разместить весь класс Занятости. Примечание: от имени ваших методов ... setForManager() ... setForOthers() похоже, что вы выбрали подход с плохим дизайном классов. Вы должны использовать подклассы, но, пожалуйста, продолжайте и разместите свой код, чтобы мы могли посмотреть его. –

+0

Каков ваш желаемый результат и какая ошибка вы получаете? –

1

Это может быть из-за вашего сравнения строк. Сравнение строк должно использовать метод Object#equals(Object) (в отличие от ==);

if (yourString.equals("COMPARISON STRING")) //do stuff 

Это происходит потому, что строка является экземпляром (который, случается содержать текст), а == оператор в этом случае проверяет только ссылки, не являются ли сами экземпляры содержат один и тот же текст.

Кроме того, = является оператором присваивания, == должен использоваться для большинства сравнений (кроме «особых случаев», например, для сравнения строк).

Следующая проблема заключается в том, что вы не переносите значения (как вы говорите). Чтобы исправить это;

public static employemntIndex = 11; 

//Increase the employment index for each GENERAL_MANAGER 
public employemnt setSerialNumberForOthers(){ 
    this.serialNumber = employmentIndex; 
    employmentIndex += 11; 
} 
+0

, что было хорошим уловом –

+0

Я его chnaged. к equlas mtd. Даже после этого это дает мне результат только 11,22. – divya

+0

У меня есть переменная serialNumber для каждого претендента. Это значение int .so по умолчанию оно равно нулю. Я думаю, что приращение значения не сохраняется, когда мы передаем это значение следующему заявителю. – divya

Смежные вопросы