Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Повторное использования кода
#1
Здравствуйте товарищи. Начал изучать потихоньку яву и читать одну книжечку.
Приступил к написанию простейшего класса (для 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). Долго думал как сделать иначе, но безрезультатно.

Вроде бы по логике все верно, и главное работает.. Но чувствую что такой подход очень глуп. Обьясните как сделать правильно. Я ищу и искал подобные участки кода, но потерялся в безысходности.(
Ответ
#2
Ну обычно такие данные засовывают в статические файлы типа xml и оттуда читают
Ответ
#3
Цитата:Ну обычно такие данные засовывают в статические файлы типа xml и оттуда читают
Это если данных действительно много. Но у меня данных не так много(всего 24), я думаю вполне адекватно все же сделать все внутри класса)
Ответ
#4
Вынеси свич в отдельный метод, передавай int туда и получай название , кода в 2 раза меньше будет. А вообще учи джава http://forum.zone-game.info/showthread.php?t=1188, особенно колекции, мапы и тд
Ответ
#5
Цитата:Это если данных действительно много. Но у меня данных не так много(всего 24), я думаю вполне адекватно все же сделать все внутри класса)
Хранить конкретные данные внутри кода, хранить статические данные в sql, хранить динамические данные в статических файлах - это все дурной тон.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Запрет использования итема с игровой панели shepatyn 1 1,157 11-23-2015, 04:00 PM
Последний пост: Daan Raven
  Понижение исходного кода La2lucky 6 1,944 08-05-2013, 10:53 PM
Последний пост: Zeratyl
  Выбор исходного кода Interlude La2lucky 8 2,658 07-17-2013, 04:43 PM
Последний пост: Ashe
  Повторное использование скиллов (олимпиада) - Interlude Java Gamlet 23 4,625 03-31-2013, 04:35 PM
Последний пост: Gamlet
  Изменение \ добавление кода в Java KanabeEvil 6 1,868 12-01-2012, 05:35 AM
Последний пост: Silvern
  запрет на повторное сообщение mego4el 1 1,203 08-25-2012, 08:37 PM
Последний пост: Romka
  ошибочка кода воодишь акк virus 1 2,532 06-18-2008, 06:54 AM
Последний пост: PROGRAMMATOR

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)