09-22-2012, 08:13 PM
Здравствуйте товарищи. Начал изучать потихоньку яву и читать одну книжечку.
Приступил к написанию простейшего класса (для l2j), который будет выполнять функции аннонса локаций. И вот столкнулся с дилеммами. Я просто стал понимать что мой код противоречит понятиям ООП, в нем куча повторного использования кода, а это просто приводит в ужас. Пожалуйста обьясните мне идиоту, как можно сделать "иначе" этот блок кода, что бы не использовать так много повторяющихся частей, или вообще упростить максимально выборку:
Т.Е. в продолжении кода там используется чтото вроде: Если локация равна ID 1, то ее имя TheEnchantedValley, и тд. Айди равно соответсвующему названию по списку.
Может быть есть более адекватные способы, которыми можно засунуть и имя и айди в один массив, или еще что -нибудь? Обьясните плз.
Как видим, во всех случаях мне нужно приравнять имя локации к одним и тем же именам, меняются только LocID (LocOne, LocTwo...etc). Долго думал как сделать иначе, но безрезультатно.
Вроде бы по логике все верно, и главное работает.. Но чувствую что такой подход очень глуп. Обьясните как сделать правильно. Я ищу и искал подобные участки кода, но потерялся в безысходности.(
Приступил к написанию простейшего класса (для 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). Долго думал как сделать иначе, но безрезультатно.
Вроде бы по логике все верно, и главное работает.. Но чувствую что такой подход очень глуп. Обьясните как сделать правильно. Я ищу и искал подобные участки кода, но потерялся в безысходности.(