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

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

Описание темы:-JAVA-

Ответ
Опции темы
Непрочитано 22.09.2012, 20:13   #1
Аватар для halaymoon
Пользователь

Автор темы (Топик Стартер) Повторное использования кода

Здравствуйте товарищи. Начал изучать потихоньку яву и читать одну книжечку.
Приступил к написанию простейшего класса (для l2j), который будет выполнять функции аннонса локаций. И вот столкнулся с дилеммами. Я просто стал понимать что мой код противоречит понятиям ООП, в нем куча повторного использования кода, а это просто приводит в ужас. Пожалуйста обьясните мне идиоту, как можно сделать "иначе" этот блок кода, что бы не использовать так много повторяющихся частей, или вообще упростить максимально выборку:

Код:
//значит есть поле:

private static final int[] MapIDS = 
{
       1,2,3,4,5,6,7,8,9,10,11,12
};

//метод, который получает рандом значения отсюда:

private static int getRandMapID()
{
return MapIDS[Rnd.get(MapIDS.length)];
}

//переменные для хранения имен локаций

private static String LocNameFirst = "Empty";
private static String LocNameSecond = "Empty";
private static String LocNameThird = "Empty";
private static String LocNameFourth = "Empty";

//методы для получения ID локации

public static int getFirstLocation(){return LocOne;}
public static int getSecondLocation(){return LocTwo;}
public static int getThirdLocation(){return LocThr;}
public static int getFourthLocation(){return LocFou;}

//по умолчанию они:

public static int LocOne = 0;
public static int LocTwo = 0;
public static int LocThr = 0;
public static int LocFou = 0;

//и отсюда примерно начинается быдло-код:

public String getLocNameFirst()
	{
		switch(getFirstLocation()){
			case 1: LocNameFirst = "The Enchanted Valley"; break;
			case 2: LocNameFirst = "Fellemere Lake"; break;
			case 3: LocNameFirst = "Iris Lake"; break;
			case 4: LocNameFirst = "Dragon Valley"; break;
			case 5: LocNameFirst = "Hardins Academy"; break;
			case 6: LocNameFirst = "Arizona"; break;
			case 7: LocNameFirst = "Ancient Battleground"; break;
			case 8: LocNameFirst = "Forsaken Plains"; break;
			case 9: LocNameFirst = "Alligator Island"; break;
			case 10: LocNameFirst = "Valley of Saints"; break;
			case 11: LocNameFirst = "Execution Grounds"; break;
			case 12: LocNameFirst = "Blazing Swamp"; break;
			case 13: LocNameFirst = "Cruma Marshlands"; break;
			case 14: LocNameFirst = "Sea of Spores"; break;
			case 15: LocNameFirst = "Swampland"; break;
			case 16: LocNameFirst = "Lair of Antharas"; break;
			case 17: LocNameFirst = "Den of Evil"; break;
			case 18: LocNameFirst = "Ketra Orc Outpost"; break;
			case 19: LocNameFirst = "Frozen Labyrinth"; break;
			case 20: LocNameFirst = "Ivory Tower"; break;
			case 21: LocNameFirst = "Ruins of Despair"; break;
			case 22: LocNameFirst = "Hot Springs"; break;
			case 23: LocNameFirst = "Dark Omens"; break;
			case 24: LocNameFirst = "Field of Whispers"; break;}
		return LocNameFirst;
	}
	public String getLocNameSecond()
	{
		switch(getSecondLocation()){
			case 1: LocNameSecond = "The Enchanted Valley"; break;
			case 2: LocNameSecond = "Fellemere Lake"; break;
			case 3: LocNameSecond = "Iris Lake"; break;
			case 4: LocNameSecond = "Dragon Valley"; break;
			case 5: LocNameSecond = "Hardins Academy"; break;
			case 6: LocNameSecond = "Arizona"; break;
			case 7: LocNameSecond = "Ancient Battleground"; break;
			case 8: LocNameSecond = "Forsaken Plains"; break;
			case 9: LocNameSecond = "Alligator Island"; break;
			case 10: LocNameSecond = "Valley of Saints"; break;
			case 11: LocNameSecond = "Execution Grounds"; break;
			case 12: LocNameSecond = "Blazing Swamp"; break;
			case 13: LocNameSecond = "Cruma Marshlands"; break;
			case 14: LocNameSecond = "Sea of Spores"; break;
			case 15: LocNameSecond = "Swampland"; break;
			case 16: LocNameSecond = "Lair of Antharas"; break;
			case 17: LocNameSecond = "Den of Evil"; break;
			case 18: LocNameSecond = "Ketra Orc Outpost"; break;
			case 19: LocNameSecond = "Frozen Labyrinth"; break;
			case 20: LocNameSecond = "Ivory Tower"; break;
			case 21: LocNameSecond = "Ruins of Despair"; break;
			case 22: LocNameSecond = "Hot Springs"; break;
			case 23: LocNameSecond = "Dark Omens"; break;
			case 24: LocNameSecond = "Field of Whispers"; break;}
		return LocNameSecond;
	}
	public String getLocNameThird()
	{
		switch(getThirdLocation()){
			case 1: LocNameThird = "The Enchanted Valley"; break;
			case 2: LocNameThird = "Fellemere Lake"; break;
			case 3: LocNameThird = "Iris Lake"; break;
			case 4: LocNameThird = "Dragon Valley"; break;
			case 5: LocNameThird = "Hardins Academy"; break;
			case 6: LocNameThird = "Arizona"; break;
			case 7: LocNameThird = "Ancient Battleground"; break;
			case 8: LocNameThird = "Forsaken Plains"; break;
			case 9: LocNameThird = "Alligator Island"; break;
			case 10: LocNameThird = "Valley of Saints"; break;
			case 11: LocNameThird = "Execution Grounds"; break;
			case 12: LocNameThird = "Blazing Swamp"; break;
			case 13: LocNameThird = "Cruma Marshlands"; break;
			case 14: LocNameThird = "Sea of Spores"; break;
			case 15: LocNameThird = "Swampland"; break;
			case 16: LocNameThird = "Lair of Antharas"; break;
			case 17: LocNameThird = "Den of Evil"; break;
			case 18: LocNameThird = "Ketra Orc Outpost"; break;
			case 19: LocNameThird = "Frozen Labyrinth"; break;
			case 20: LocNameThird = "Ivory Tower"; break;
			case 21: LocNameThird = "Ruins of Despair"; break;
			case 22: LocNameThird = "Hot Springs"; break;
			case 23: LocNameThird = "Dark Omens"; break;
			case 24: LocNameThird = "Field of Whispers"; break;}
		return LocNameThird;
	}
	public String getLocNameFourth()
	{
		switch(getFourthLocation()){
			case 1: LocNameFourth = "The Enchanted Valley"; break;
			case 2: LocNameFourth = "Fellemere Lake"; break;
			case 3: LocNameFourth = "Iris Lake"; break;
			case 4: LocNameFourth = "Dragon Valley"; break;
			case 5: LocNameFourth = "Hardins Academy"; break;
			case 6: LocNameFourth = "Arizona"; break;
			case 7: LocNameFourth = "Ancient Battleground"; break;
			case 8: LocNameFourth = "Forsaken Plains"; break;
			case 9: LocNameFourth = "Alligator Island"; break;
			case 10: LocNameFourth = "Valley of Saints"; break;
			case 11: LocNameFourth = "Execution Grounds"; break;
			case 12: LocNameFourth = "Blazing Swamp"; break;
			case 13: LocNameFourth = "Cruma Marshlands"; break;
			case 14: LocNameFourth = "Sea of Spores"; break;
			case 15: LocNameFourth = "Swampland"; break;
			case 16: LocNameFourth = "Lair of Antharas"; break;
			case 17: LocNameFourth = "Den of Evil"; break;
			case 18: LocNameFourth = "Ketra Orc Outpost"; break;
			case 19: LocNameFourth = "Frozen Labyrinth"; break;
			case 20: LocNameFourth = "Ivory Tower"; break;
			case 21: LocNameFourth = "Ruins of Despair"; break;
			case 22: LocNameFourth = "Hot Springs"; break;
			case 23: LocNameFourth = "Dark Omens"; break;
			case 24: LocNameFourth = "Field of Whispers"; break;}
		return LocNameFourth;
	}
Т.Е. в продолжении кода там используется чтото вроде: Если локация равна ID 1, то ее имя TheEnchantedValley, и тд. Айди равно соответсвующему названию по списку.
Может быть есть более адекватные способы, которыми можно засунуть и имя и айди в один массив, или еще что -нибудь? Обьясните плз.

Как видим, во всех случаях мне нужно приравнять имя локации к одним и тем же именам, меняются только LocID (LocOne, LocTwo...etc). Долго думал как сделать иначе, но безрезультатно.

Вроде бы по логике все верно, и главное работает.. Но чувствую что такой подход очень глуп. Обьясните как сделать правильно. Я ищу и искал подобные участки кода, но потерялся в безысходности.(
halaymoon вне форума Ответить с цитированием
Непрочитано 22.09.2012, 20:26   #2
Аватар для pchayka
Какие бекапы? О_о

По умолчанию Re: Повторное использования кода

Ну обычно такие данные засовывают в статические файлы типа xml и оттуда читают
pchayka вне форума Ответить с цитированием
Непрочитано 22.09.2012, 20:52   #3
Аватар для halaymoon
Пользователь

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

Цитата:
Ну обычно такие данные засовывают в статические файлы типа xml и оттуда читают
Это если данных действительно много. Но у меня данных не так много(всего 24), я думаю вполне адекватно все же сделать все внутри класса)
halaymoon вне форума Ответить с цитированием
Непрочитано 22.09.2012, 23:06   #4
Аватар для shocked
Пользователь

По умолчанию Re: Повторное использования кода

Вынеси свич в отдельный метод, передавай int туда и получай название , кода в 2 раза меньше будет. А вообще учи джава http://forum.zone-game.info/showthread.php?t=1188, особенно колекции, мапы и тд
shocked вне форума Ответить с цитированием
Непрочитано 23.09.2012, 11:09   #5
Аватар для pchayka
Какие бекапы? О_о

По умолчанию Re: Повторное использования кода

Цитата:
Это если данных действительно много. Но у меня данных не так много(всего 24), я думаю вполне адекватно все же сделать все внутри класса)
Хранить конкретные данные внутри кода, хранить статические данные в sql, хранить динамические данные в статических файлах - это все дурной тон.
pchayka вне форума Ответить с цитированием
Сказали спасибо:
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
itamename-e.dat UFODriverr Lineage II 5 28.02.2021 18:17
ID-всех придметов ! ! ! ilyxa Lineage II 25 10.02.2020 15:35
Обфускатор Java кода Ramzessuss Java 5 21.09.2010 15:00
[Продам] Gracia Part 2 L2Dream PaInKiLlEr Рынок / Marketplace 10 04.06.2010 00:18


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

Вверх