Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Kochergina_5
import java.util.*; import java.lang.*; class Rextester { // "0й уровень" (физический) шаблона Flyweight // представить 4 параметра и составить 5 записей по СВОИМ данным // "1й уровень" (виртуальный) шаблона Flyweight // сделать 2 СВОИХ примера выборки данных (см. virtual_expensive и virtual_formal) // "2й уровень" (виртуальный) шаблона Flyweight // сделать 1 СВОЙ пример выборки данных, объединяющий предыдущие два (см. virtual_expensive_formal) // все имена сделать информативными!! public static final int IND_NAME = 0; // [0] - название сетевой карты public static final int IND_PRICE = 1; // [1] - цена (руб.) public static final int IND_PORT = 2; // [2] - кол-во портов public static final int IND_MbS = 3; // [3] - скорость передачи данных public static final int IND_CONNECTINTER = 4; // [4] - интерфейс public static final String PHYSICAL_DATA[][] = { {"ASUS", "5000", "two ports","1000", "pci"}, {"ExeGate", "350", "one port","100", "pci-e"}, {"Dexp", "370", "one port","100", "pci-e"}, {"Gembird", "450", "one port","100", "pci"}, {"5bites", "1550", "one port","100", "usb"} }; public static final int COUNT_ROWS = 5; // 5 строк public static final int COUNT_COLUMNS = 5; // 5 параметров public static void main(String[] args) { List<DataString> physical_data = new ArrayList<DataString>(); StringSetFactory set_factory = new StringSetFactory(); for (int i = 0; i < Rextester.COUNT_ROWS; i++) { physical_data.add(set_factory.getUnsharedByIndex(i)); } List <iDataString> virtual_expensive = new ArrayList<iDataString>(); List <iDataString> virtual_formal = new ArrayList<iDataString>(); List <iDataString> virtual_standart = new ArrayList<iDataString>(); iDataString iDataString_expensive; iDataString iDataString_formal; iDataString iDataString_standart; // здесь нужно добавить объявление и заполнение 3го списка и условий выбора for (int i = 0; i < Rextester.COUNT_ROWS; i++) { if(Integer.parseInt(physical_data.get(i).getDataByIndex(IND_PRICE)) > 1000) { iDataString_expensive = set_factory.getSharedByName(physical_data.get(i).getDataByIndex(IND_NAME)); virtual_expensive.add(iDataString_expensive); } if( physical_data.get(i).getDataByIndex(IND_PORT) == "two ports") { iDataString_standart = set_factory.getSharedByName(physical_data.get(i).getDataByIndex(IND_NAME)); virtual_standart.add(iDataString_standart); } if( physical_data.get(i).getDataByIndex(IND_CONNECTINTER) == "pci") { iDataString_formal = set_factory.getSharedByName(physical_data.get(i).getDataByIndex(IND_NAME)); virtual_formal.add(iDataString_formal); } } List <iDataString> virtual_all = new ArrayList<iDataString>(); for (int i = 0; i < virtual_standart.size(); i++) { iDataString_standart = virtual_standart.get(i); for(int j = 0; j < virtual_expensive.size(); j++) { iDataString_expensive = virtual_expensive.get(j); if(iDataString_standart == iDataString_expensive) { for(int y = 0; y < virtual_formal.size(); y++ ) { iDataString_formal = virtual_formal.get(y); if(iDataString_formal == iDataString_expensive) // при совпадении по обоим спискам, добавляем { virtual_all.add(iDataString_standart); } }} } } // выводим на экран результаты через общий интерфейс iDataString for (int i = 0; i < Rextester.COUNT_ROWS; i++) { physical_data.get(i).displayData("physical_data:"); } for (int i = 0; i < virtual_expensive.size(); i++) { virtual_expensive.get(i).displayData("virtual_expensive:"); } for (int i = 0; i < virtual_formal.size(); i++) { virtual_formal.get(i).displayData("virtual_formal:"); } for (int i = 0; i < virtual_standart.size(); i++) { virtual_standart.get(i).displayData("virtual_standart:"); } for (int i = 0; i < virtual_all.size(); i++) { virtual_all.get(i).displayData("virtual_all:"); } } } interface iDataString // интерфейс работы со строками { String getDataByIndex(int index);// получить строку по индексу void displayData(String str_about); // отобразить на экране строку с данными по всем индексам } class DataString implements iDataString // реализация интерфейса работы с массивом строк { private int _count = 0; // число индексов строк private String [] _data = new String[Rextester.COUNT_COLUMNS]; public DataString(int count, String [] data) { this._count = count; for(int i = 0; i < _count; i++) { //System.out.println("Инициализирую шаг" + i + "data:" + data[i]); this._data[i] = data[i]; // можно раскомментировать на этапе отладки } } @Override public String getDataByIndex(int index) { if(index < 0 || index >= _count) { System.out.println("Ошибка: попытка доступа к недопустимому значению индекса: " + index);return ""; } else return _data[index]; } @Override public void displayData(String str_about) { if(str_about != "") System.out.println(str_about); // печатаем строку заглавия, если задана if(_count > 0) System.out.print("Данные:"); for(int i = 0; i < _count; i++) { System.out.print("[" + i + "]" + _data[i] + "\n"); } } } class StringSetFactory // класс для "фабричного" порождения массивов строк через "хэш-карту" { private final HashMap<String, DataString> _dataStringSet = new HashMap<>(); // "один-к-одному" public DataString getUnsharedByIndex(int index) // 0й "физический" ("нерасшаренный") уровень Flyweight { DataString data; // просто создаем новый экземпляр DataString и возвращаем //if(index >=0 && index < Rextester.COUNT) // проверка нужна в случае, если индексы будет вводить пользователь и т.д. data = new DataString(Rextester.COUNT_COLUMNS, Rextester.PHYSICAL_DATA[index]); return data; } public iDataString getSharedByName(String name) // 1й и последующие "виртуальные" ("расшаренный") уровни Flyweight { DataString data = _dataStringSet.get(name);// ищем по имени (Key: ключ ассоциативного массива) if (data == null) { // в "классическом" шаблоне добавляются дефолтные значения новой записи (Value: значения ассоциативного массива) // data = new DataString("Unknown", "?", "нет", "нет", "нет"); ////// начало дополнения к шаблону Flyweight ////// int i_found = -1; for(int i = 0; i < Rextester.COUNT_ROWS; i++) { if(Rextester.PHYSICAL_DATA[i][Rextester.IND_NAME] == name) {i_found = i; break;} } if(i_found == -1) System.out.println("Ошибка поиска: ключ " + name + " не найден: новая запись к выборке данных не добавлена!"); else data = new DataString(Rextester.COUNT_COLUMNS, Rextester.PHYSICAL_DATA[i_found]); ////// завершение дополнения к шаблону Flyweight ////// _dataStringSet.put(name, data); // добавляем по имени, по которому искали } return data; } }
run
|
edit
|
history
|
help
0
Umang Khambhalikar
t
Implementation of several common methods of LinkedList
JAVA # 3 sayının En büyüğü
Day 2
Random number
Test
brindtuch
OBF-7
Intersection of Array