Кейсы до определенного значения - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Описание темы:java

Ответ
Опции темы
Непрочитано 11.10.2012, 16:30   #1
Пользователь

Автор темы (Топик Стартер) Кейсы до определенного значения

Доброго вечера , небольшой вопрос по кейсам. (см код ниже).
Хочу сделать так, что бы rewardAmount установил значение в 50 после 20 кейса, и до определенного значения.

Что то вроде диапазона кейсов., где внутри нужно устанавливать тот же параметр

Т.е. примерно так
Код:
case 20: rewardAmount = 50; break;
       case 21: rewardAmount = 50; break;
       ...
       case 9999: rewardAmount = 50; break;
       //а здесь будет тот самый предел, типа:
       case 10000: rewardAmount = 0; break;
Как это реализовать? Внизу я пробовал делать вложенные кейсы, но по сути дела это наверное лишний код... Чегото я не понимаю, растолкуйте пожалуйсто.

Код:
					switch(Player.mobkill)
					{
						case 1: rewardAmount = 3; break;
						case 2: rewardAmount = 6; break;
						case 3: rewardAmount = 12; break;
						case 4: rewardAmount = 18; break;
						case 5: rewardAmount = 24; break;
						case 6: rewardAmount = 30; break;
						case 7: rewardAmount = 33; break;
						case 8: rewardAmount = 36; break;
						case 9: rewardAmount = 39; break;
						case 10: rewardAmount = 42; break;
						case 11: rewardAmount = 44; break;
						case 12: rewardAmount = 46; break;
						case 13: rewardAmount = 48; break;
						case 14: 
							case 15:
								case 16:
									case 17:
										case 18:
											case 19:
												case 20: rewardAmount = 50; break;

						default: rewardAmount = 1;
					}
__________________
mego4el вне форума Ответить с цитированием
Непрочитано 11.10.2012, 16:35   #2
Аватар для Ashe
Олдфаг

По умолчанию Re: Кейсы до определенного значения

http://kostin.ws/java/java-switch-and-more-logic.html
__________________
Fortuna - non penis, in manus non recipe.
Ashe вне форума Ответить с цитированием
Непрочитано 11.10.2012, 17:03   #3
Пользователь

Автор темы (Топик Стартер) Re: Кейсы до определенного значения

Видел, читал. но ответа на вопрос так и не нашел. Вопрос мой вообще-то в другом..

Как использовать все промежуточные кейсы, до первого брека, не вписывая каждое значение кейса?

допустим у меня 200-300 значений case:

Код:
case 1: var = 1;
case 2: var = 1;
case 3: var = 1;
...
case 299: var = 1;
case 300: var = 1;
case 301: var = 2;
Что бы каждый раз не писать var = 1, делаются вложенные кейсы

Код:
case 1:
case 2:
case 3:
...
case 300: var = 1;break;
case 301: var = 2; break;
Но каким образом можно не записывая каждое значение кейса сделать так, что бы он все-таки прошелся по этому кейсу (от 4 до 299)?
__________________
mego4el вне форума Ответить с цитированием
Непрочитано 11.10.2012, 17:58   #4
Пользователь

По умолчанию Re: Кейсы до определенного значения

Код:
if(var > 4 && var < 299)
  { /* Code */}
else if(var > 299 && var < 10000)
  { /* Code */ }
И так далее. Как вариант.
__________________
НЛО прилетело и оставило подпись здесь.
YK_Sirius вне форума Ответить с цитированием
Непрочитано 11.10.2012, 22:20   #5
Аватар для Yorie

По умолчанию Re: Кейсы до определенного значения

first-post:
Свернуть ↑Развернуть ↓


Оператор switch имеет довольно специфичную структуру на низком уровне и не предназначен для использования ренджей.

Также, Вы несколько неверно понимаете что такое case. Они не могут быть вложенными, но могут вести в один и тот же блок кода (что в Вашем случае как раз и происходит).

Если Вы точно знаете, что при mobKill равном 1 награда 10, при mobKill равном 2 награда 20, а во всех остальных случаях награда 500, то занесите ее в default.

Если нужно несколько таких ренджей, то спасет, наверное, только if. Switch не обладает гибкостью, однако, в целом, работает немного быстрее, чем if, но этого не будет в Вашем случае - Вы просто раздуете код.
__________________
// aka Deft
Yorie вне форума Ответить с цитированием
Непрочитано 11.10.2012, 22:50   #6
Аватар для DiagoD

По умолчанию Re: Кейсы до определенного значения

Если вы все же хотите зарисовать кейс для души то у вас есть 2 варианта:

1.
Код:
	switch(Player.mobkill)
	{
		case 1:
			rewardAmount = 3;
			break;
		case 2:
			rewardAmount = 6;
			break;
		case 3:
			rewardAmount = 12;
			break;
		default:
			if(Player.mobkill > 3 && Player.mobkill < 10)
				rewardAmount = 20;
			else
				rewardAmount = 1;
			break;
	}
2.
Код:
	switch(Player.mobkill)
	{
		case 1:
			rewardAmount = 3;
			break;
		case 2:
			rewardAmount = 6;
			break;
		case 3:
			rewardAmount = 12;
			break;
		case 4:
		далее куча case
		case последний:
			rewardAmount = 20;
			break;
		default:
				rewardAmount = 1;
			break;
	}
но в вашем случае скорей всего будет логичней использование if(...)->else if(...)->else
__________________
open-team.ru - Freya, HighFive...
DiagoD вне форума Отправить сообщение для DiagoD с помощью ICQ Отправить сообщение для DiagoD с помощью Skype™ Ответить с цитированием
Непрочитано 12.10.2012, 08:13   #7
Аватар для n3k0nation
Antihero

По умолчанию Re: Кейсы до определенного значения

Цитата:
Сообщение от Yorie Посмотреть сообщение
Switch не обладает гибкостью, однако, в целом, работает немного быстрее, чем if
В байткоде джавы, свитч разворачивается в большой цикл, с кучей прыжков по коду. Он в любом случае не может быть быстрее примитивной операции if/goto.
Если не верите мне, то можно посмотреть ассемблерный код теста, после прогонки jit'ом.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 12.10.2012, 08:44   #8
Аватар для Ashe
Олдфаг

По умолчанию Re: Кейсы до определенного значения

http://www.ashishpaliwal.com/blog/20...ich-is-better/

Исходя из этого можно сказать, что существенной разницы между if-else и switch - нет, а остальное - дело вкуса, удобства, опыта.
__________________
Fortuna - non penis, in manus non recipe.
Ashe вне форума Ответить с цитированием
Непрочитано 12.10.2012, 17:46   #9
Аватар для Yorie

По умолчанию Re: Кейсы до определенного значения

Цитата:
Iteration -> 100 1000
if-else 8 ms 69 ms
switch finite 3 ms 34 ms
switch sparse 7 ms 21 ms
Из Вашей же ссылки.
Цитата:
The finite switch statement was converted to tableswitch
Table-свитчи используются не только в Java и дают небольшой выигрыш в "многоэтажных" проверках, в предыдущем посте слово "немного" было важным. Я не говорил о десятикратном увеличении скорости выполнения. Switch из первого поста как раз является finite.
__________________
// aka Deft
Yorie вне форума Ответить с цитированием
Сказали спасибо:
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где взять значения AbnormalEffect?? Малявко Работа со скриптами 33 28.05.2011 12:22
Удалить Определенного Нпц Из Спаунлиста mego4el Lineage II 3 02.03.2011 15:04
Проблема со входом на определенного персонажа Roches Серверная часть 4 11.12.2010 23:09


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 12:55. Часовой пояс GMT +3.

Вверх