Перейти к содержанию
Авторизация  
GorDeveloper

Switch -> If{}Else If{}

Рекомендуемые сообщения

Подскажите, взрываю себе мозг.

 

Есть некое выражение, заложенное в Switch(), где в кейсах видим такую картинку:

 

case ItemTemplate.SLOT_L_EAR:
case ItemTemplate.SLOT_R_EAR:
case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR:
{
if (_paperdoll[PAPERDOLL_LEAR] == null)
{
 setPaperdollItem(PAPERDOLL_LEAR, item);
}
else if (_paperdoll[PAPERDOLL_REAR] == null)
{
 setPaperdollItem(PAPERDOLL_REAR, item);
}
else
{
 setPaperdollItem(PAPERDOLL_LEAR, item);
}
break;
}

 

Нужно переделать сию конструкцию в if{}else if{} ввиду невозможности запихнуть long в switch.

 

Получилось так:

 

else if(bodySlot == ItemTemplate.SLOT_L_EAR || bodySlot == ItemTemplate.SLOT_R_EAR)
{
if (_paperdoll[PAPERDOLL_LEAR] == null)
{
setPaperdollItem(PAPERDOLL_LEAR, item);
}
else if (_paperdoll[PAPERDOLL_REAR] == null)
{
setPaperdollItem(PAPERDOLL_REAR, item);
}
else
{
setPaperdollItem(PAPERDOLL_LEAR, item);
}
}

 

Но правильно ли? Т.к. после сего действа, перестали одеваться сережки.

 

Поправьте и скажите как лучше, не очень понимаю.

Изменено пользователем AwakenDev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

case ItemTemplate.SLOT_L_EAR:

case ItemTemplate.SLOT_R_EAR:

case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

else if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR)
 {
  if (_paperdoll[PAPERDOLL_LEAR] == null)
  {
   setPaperdollItem(PAPERDOLL_LEAR, item);
  }
  else if (_paperdoll[PAPERDOLL_REAR] == null)
  {
   setPaperdollItem(PAPERDOLL_REAR, item);
  }
  else
  {
   setPaperdollItem(PAPERDOLL_LEAR, item);
  }
 }

 

Суть дела не поменялась:

 

[12.03.14 13:01:35:783]  WARN items.Inventory: onEquip: unknown body slot:6 for item id: 6656

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Суть дела не поменялась:

[12.03.14 13:01:35:783] WARN items.Inventory: onEquip: unknown body slot:6 for item id: 6656

 

До меня чет не дошло что именно вы не можете впихнуть.

И чем не устраивает данный код.

 

 case ItemTemplate.SLOT_L_EAR:
case ItemTemplate.SLOT_R_EAR:
{
if (_paperdoll[PAPERDOLL_LEAR] == null)
{
setPaperdollItem(PAPERDOLL_LEAR, item);
}
else if (_paperdoll[PAPERDOLL_REAR] == null)
{
setPaperdollItem(PAPERDOLL_REAR, item);
}
else
{
setPaperdollItem(PAPERDOLL_LEAR, item);
}
break;
}

 

Есть некое выражение, заложенное в Switch(), какая Управляющая ? Управляющая ищет совпадения в кейсах. И потом ток чет делает.

Давайте метод целиком и что хотите c делать подробно будем думать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

До меня чет не дошло что именно вы не можете впихнуть.

И чем не устраивает данный код.

 

 case ItemTemplate.SLOT_L_EAR:
case ItemTemplate.SLOT_R_EAR:
{
if (_paperdoll[PAPERDOLL_LEAR] == null)
{
setPaperdollItem(PAPERDOLL_LEAR, item);
}
else if (_paperdoll[PAPERDOLL_REAR] == null)
{
setPaperdollItem(PAPERDOLL_REAR, item);
}
else
{
setPaperdollItem(PAPERDOLL_LEAR, item);
}
break;
}

 

Есть некое выражение, заложенное в Switch(), какая Управляющая ? Управляющая ищет совпадения в кейсах. И потом ток чет делает.

Давайте метод целиком и что хотите c делать подробно будем думать :)

 

Суть в том, что свич не может обрабатывать тип long в себе.

 

Тут изначально, данные в типе int и всё нормально

 

public void equipItem(ItemInstance item)
{
 int bodySlot = item.getBodyPart();

 double hp = getActor().getCurrentHp();
 double mp = getActor().getCurrentMp();
 double cp = getActor().getCurrentCp();
 switch(bodySlot)
 {
				    case ItemTemplate.SLOT_L_EAR:
  case ItemTemplate.SLOT_R_EAR:
  case ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR:
  {
   if(_paperdoll[PAPERDOLL_LEAR] == null)
   {
 setPaperdollItem(PAPERDOLL_LEAR, item);
   }
   else if(_paperdoll[PAPERDOLL_REAR] == null)
   {
 setPaperdollItem(PAPERDOLL_REAR, item);
   }
   else
   {
 setPaperdollItem(PAPERDOLL_LEAR, item);
   }
   break;
  }

 

 

 

После перевода в лонг, необходима смена swith на if/else.

 

public void equipItem(ItemInstance item)
{
 long bodySlot = item.getBodyPart();

 System.out.println("SLOTS DEBUG SYSTEM: BodyPart slot is " + bodySlot);
 if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR)
 {
  if (_paperdoll[PAPERDOLL_LEAR] == null)
  {
   setPaperdollItem(PAPERDOLL_LEAR, item);
  }
  else if (_paperdoll[PAPERDOLL_REAR] == null)
  {
   setPaperdollItem(PAPERDOLL_REAR, item);
  }
  else
  {
   setPaperdollItem(PAPERDOLL_LEAR, item);
  }
 }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а так не пробовал?

 

if(bodySlot == (ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR))

 

просто ты в

 

if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR)

 

уже над результатами сравнения производишь битовое сложение.

или над ItemTemplate.SLOT_L_EAR и bodySlot - я просто не помнь ща наизусть очередность операций в таком случае.

Изменено пользователем Gaikotsu
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а так не пробовал?

 

if(bodySlot == (ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR))

 

просто ты в

 

if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR)

 

уже над результатами сравнения производишь битовое сложение.

или над ItemTemplate.SLOT_L_EAR и bodySlot - я просто не помнь ща наизусть очередность операций в таком случае.

 

Ща глянем. Кстати, возьми на заметку. В хрониках выше линдвиора это понадобится. Там ячейки уже не укладываются в integer'e.

 

Да, Благодарю, дело было именно в этом.

Изменено пользователем AwakenDev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да я в курсе что там есть номера слотов выше 31.

но пока мне это не актуально - это у тебя сборка пилится for fun и ты в принципе только пакетку и все что ей сопутствует мучаешь, а у меня сборка, над которой я работаю, уже стоит на серверах на которых играют и посему пока ап до эпиздеона и выше не планируется - пока линдвиор домучивается, притом 531 протокол - выше пока по пакетке даже и не лезу.

Изменено пользователем Gaikotsu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да я в курсе что там есть номера слотов выше 31.

но пока мне это не актуально - это у тебя сборка пилится for fun и ты в принципе только пакетку и все что ей сопутствует мучаешь, а у меня сборка, над которой я работаю, уже стоит на серверах на которых играют и посему пока ап до эпиздеона и выше не планируется - пока линдвиор домучивается, притом 531 протокол - выше пока по пакетке даже и не лезу.

 

Очень много букав, но дочитал. Я так на всякий случай.

 

И там не просто номера выше 31.

 

Там теперь вся инфа о бодипартах отсылается в writeQ.

Изменено пользователем AwakenDev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну это логично, ибо битовую маску со значениями слотов выше 31 в int не пошлешь.

интерестно как будут выкручиваться если внезапно еще слотов добавят и 63 (при long) не хватит :D

ну а мне пока даже на будущее нет смысла делать хранение в long - будут лишь лишние преобразования типов в итоге.

Изменено пользователем Gaikotsu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну это логично, ибо битовую маску со значениями слотов выше 31 в int не пошлешь.

интерестно как будут выкручиваться если внезапно еще слотов добавят и 63 (при long) не хватит :D

ну а мне пока даже на будущее нет смысла делать хранение в long - будут лишь лишние преобразования типов в итоге.

 

Ну пока добавилось 1 брошка и 6 камней к ней. соответственно 7 слотов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ты как будто корейцев не знаешь - ударит им опять что-то в голову и выкинут коленце типа "а давайте пропустим несколько десятков номеров слотов и сделаем новые слоты с номерами ну например с 71".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а так не пробовал?

 

if(bodySlot == (ItemTemplate.SLOT_L_EAR | ItemTemplate.SLOT_R_EAR))

 

просто ты в

 

if(bodySlot == ItemTemplate.SLOT_L_EAR | bodySlot == ItemTemplate.SLOT_R_EAR)

 

уже над результатами сравнения производишь битовое сложение.

или над ItemTemplate.SLOT_L_EAR и bodySlot - я просто не помнь ща наизусть очередность операций в таком случае.

 

Видимо я слишком тонко ответил.

К прочтению: http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...