Ендырь (19.09.2017)
Югорск сверху
Бросил курить
Моя Lada Vesta
Silenzium — Мурка (кавер)
Слияние файлов
package com.javarush.test.level18.lesson10.home10; /* Собираем файл Собираем файл из кусочков Считывать с консоли имена файлов Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37. Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end" В папке, где находятся все прочтенные файлы, создать файл без приставки [.partN]. Например, Lion.avi В него переписать все байты из файлов-частей используя буфер. Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, ..., в конце - последнюю. Закрыть все потоки ввода-вывода Темповые файлы создавать нельзя, т.к. на сервере заблокирована возможность создания каких любо файлов */ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; public class Solution { public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); ArrayList<String> parts = new ArrayList<String>(); FileInputStream fileInputStream = null; String nextFileName = null; //Читаем файлы пока не "end" while (true) { if ("end".equals(nextFileName = scanner.nextLine())) break; else parts.add(nextFileName); } scanner.close(); //Сортируем коллекцию Collections.sort(parts, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.toString().compareTo(o2.toString()); } }); //Выходной файловый поток String outputFileName = parts.get(0).split(".part")[0]; FileOutputStream fileOutputStream = new FileOutputStream(outputFileName); //Сливаем файлы for (String partsFileNames : parts) { fileInputStream = new FileInputStream(partsFileNames); byte[] buffer = new byte[fileInputStream.available()]; fileInputStream.read(buffer); fileOutputStream.write(buffer); fileInputStream.close(); } fileOutputStream.close(); System.out.println("Объединение файлов выполнено!"); } }
package com.javarush.test.level18.lesson10.bonus01; /* Шифровка Придумать механизм шифровки/дешифровки Программа запускается с одним из следующих наборов параметров: -e fileName fileOutputName -d fileName fileOutputName где fileName - имя файла, который необходимо зашифровать/расшифровать fileOutputName - имя файла, куда необходимо записать результат шифрования/дешифрования -e - ключ указывает, что необходимо зашифровать данные -d - ключ указывает, что необходимо расшифровать данные */ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Solution { public static void main(String[] args) throws IOException{ String key = args[0]; String fileInputName = args[1]; String fileOutputName = args[2]; FileInputStream fileInputStream = new FileInputStream(fileInputName); FileOutputStream fileOutputStream = new FileOutputStream(fileOutputName); if ("-e".equals(key)) { while (fileInputStream.available() > 0) { int data = fileInputStream.read(); if (data == 0xFF) data = 0x00; else data++; fileOutputStream.write(data); } } else if ("-d".equals(key)) { while (fileInputStream.available() > 0) { int data = fileInputStream.read(); if (data == 0x00) data = 0xFF; else data--; fileOutputStream.write(data); } } fileInputStream.close(); fileOutputStream.close(); System.out.println("Выполнено!"); } }
Файлы и исключения
package com.javarush.test.level18.lesson10.home09; /* Файлы и исключения Читайте с консоли имена файлов Если файла не существует (передано неправильное имя файла), то перехватить исключение, вывести в консоль переданное неправильное имя файла и завершить работу программы Не забудьте закрыть все потоки */ import java.io.*; public class Solution { public static void main(String[] args) { BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in)); String f = ""; while(true){ try { try { f = rdr.readLine(); File file = new File(f); if (!file.exists()) throw new FileNotFoundException(f); } catch (FileNotFoundException e) { System.out.println(f); break; } } catch (IOException e) { e.printStackTrace(); } } } }
Адаптер для двух интерфейсов
package com.javarush.test.level19.lesson03.task03; /* Адаптация нескольких интерфейсов Адаптировать IncomeData к Customer и Contact. Классом-адаптером является IncomeDataAdapter. Инициализируйте countries перед началом выполнения программы. Соответствие кода страны и названия: UA Ukraine RU Russia CA Canada Дополнить телефонный номер нулями до 10 цифр при необходимости */ import java.util.HashMap; import java.util.Map; public class Solution { public static Map<String,String> countries = new HashMap<String,String>(); static { countries.put("UA", "Ukraine"); countries.put("RU", "Russia"); countries.put("CA", "Canada"); countries.put("US", "United States"); } public static class IncomeDataAdapter implements Customer, Contact{ private IncomeData incomeData; public IncomeDataAdapter(IncomeData incomeData) { this.incomeData = incomeData; } @Override public String getName() { return this.incomeData.getContactLastName() + ", " + this.incomeData.getContactFirstName(); } @Override public String getPhoneNumber() { String clearPhoneNumber = Integer.valueOf(this.incomeData.getPhoneNumber()).toString(); if (clearPhoneNumber.length() < 10) { while (clearPhoneNumber.length() < 10) clearPhoneNumber = "0" + clearPhoneNumber; } String newPhoneName = "+" + this.incomeData.getCountryPhoneCode() + "(" + clearPhoneNumber.substring(0, 3) + ")" + clearPhoneNumber.substring(3, 6) + "-" + clearPhoneNumber.substring(6,8) + "-" + clearPhoneNumber.substring(8); return newPhoneName; } @Override public String getCompanyName() { return this.incomeData.getCompany(); } @Override public String getCountryName() { String countryName = ""; for (Map.Entry<String, String> pair : countries.entrySet()){ if (pair.getKey().equals(this.incomeData.getCountryCode())) countryName = pair.getValue(); } return countryName; } } public static interface IncomeData { String getCountryCode(); //example UA String getCompany(); //example JavaRush Ltd. String getContactFirstName(); //example Ivan String getContactLastName(); //example Ivanov int getCountryPhoneCode(); //example 38 int getPhoneNumber(); //example 501234567 } public static interface Customer { String getCompanyName(); //example JavaRush Ltd. String getCountryName(); //example Ukraine } public static interface Contact { String getName(); //example Ivanov, Ivan String getPhoneNumber(); //example +38(050)123-45-67 } //Тестовый main public static void main(String[] args) { class iData implements IncomeData { @Override public String getCountryCode() { return "US"; } @Override public String getCompany() { return "Planet Express"; } @Override public String getContactFirstName() { return "Bender"; } @Override public String getContactLastName() { return "Rodriguez"; } @Override public int getCountryPhoneCode() { return 1; } @Override public int getPhoneNumber() { return 666666; } } IncomeDataAdapter adapter = new IncomeDataAdapter(new iData()); System.out.println(adapter.getCompanyName()); System.out.println(adapter.getCountryName()); System.out.println(adapter.getPhoneNumber()); System.out.println(adapter.getName()); } }
Reincarnation
Лексика языка Java состоит из следующих элементов: ключевые слова, разделители, идентификаторы, литералы, комментарии, операторы и пробелы.
Ключевые слова
В настоящее время зарезервировано 50 ключевых слов. Эти слова, в сочетании с синтаксисом операторов и разделителями, образуют основу языка Java. Их нельзя использовать ни в качестве идентификаторов, ни для имен переменных, классов или методов.
abstract | continue | for | new | switch |
assert | default | goto * | package | synchronized |
boolean | do | if | private | this |
break | double | implements | protected | throw |
byte | else | import | public | throws |
case | enum | instanceof | return | transient |
catch | extends | int | short | try |
char | final | interface | static | void |
class | finally | long | strictfp | volatile |
const * | float | native | super | while |
* Ключевые слова goto и const зарезервированы, но не используются. Кроме того зарезервированы слова true, false и null. Их также нельзя использовать в качестве идентификаторов и т.д.
Разделители
В языке Java есть символы, которые используются как разделители. Чаще всего используется символ точка с запятой. Однако он не единственный.
() | круглые скобки | Используются для передачи списков параметров в определениях и вызовах методов. Их применяют также для определения приоритета в выражениях, выражений в управляющих операторах и преобразовании типов |
{} | фигурные скобки | Используются для указания значений автоматически инициализируемых массивов. Их применяют также для определения блоков кода, классов, методов и локальных областей видимости |
[] | квадратные скобки | Используются для объявления типов массивов, а также при обращении к элементам массивов |
; | Точка с запятой | Завершает операторы |
, | Запятая | Разделяет последовательные идентификаторы в объявлениях переменных. Этот символ также используется для создания цепочек операторов внутри оператора for |
. | Точка | Используется для отделения имен пактов от имен вложенных пакетов и классов, а также для отделения переменной или метода от ссылочной переменной |
Идентификаторы
Идентификаторы используются для именования классов, методов и переменных. Идентификатором может служить любая последовательность строчных и прописных букв, цифр или символов подчеркивания (_) или доллара ($). Для общего использования символ доллара не предназначается. Идентификаторы не должны начинаться с цифры. Язык Java чувствителен к регистру символов, поэтому идентификаторы FIRST и First — являются различными. Стоит также отметить, что поскольку в Java в полной мере применяется Unicode, то в качестве «буквы» может использоваться также символ из армянского, корейского, грузинского, индийского и практически любого алфавита.
Литералы
В Java постоянное значение задается его литеральным представлением. Например:
100 | 896.34 | ‘Y’ | «Привет, мир!» |
Первый литерал задает целочисленное значение, второй литерал задает значение с плавающей точкой, третий литерал — символьную константу, четвертый — строковое значение. Литерал можно использовать везде, где допустимо использование значений данного типа.
Комментарии
В Java есть 3 типа комментариев
1. Однострочные комментарии. Начинаются с символов // и длятся до конца строки.
// Это - однострочный комментарий
2. Многострочные комментарии. Начинаются символами /* и заканчиваются символами */. Например:
/* Это - многострочный комментарий*/
3. Комментарии документации:
/** Это - комментарий документации Java*/
Комментарии данного типа используются для создания файла HTML документации программы.
Отступы
Java — язык свободной формы. При написании программы не нужно следовать никаким специальным правилам в отношении отступов. Единственное обязательное требование — наличие, по меньшей мере, одного пробела между лексемами, которые не разграничены оператором или разделителем. В Java отступами являются символы пробела, табуляции или символа новой строки.
Продолжение: Шаг 7. Две программы
Начало: Шаг 5. Объектно-ориентированное программирование «на пальцах»
Java — объектно-ориентированнный язык программирования. Что это означает? Что вообще такое объектно-ориентированное програмиирование (ООП)? Зачем оно нужно?
С этими вопросами мы постараемся разобраться подробно.
Все языки объектно-ориентированного программирования предоставляют механизмы, которые облегчают реализацию объектно-ориентированной модели. Этими механизмами являются инкапсуляция, наследование, полиморфизм. Рассмотрим эти концепции.
Инкапсуляция
Основой инкапсуляции в Java является класс. Класс определяет данные и программный код некоторого набора объектов. Объект является экземпляром класса. Таким образом, класс — это логическая конструкция, а объект – физическая реальность. По сути, класс является шаблоном объекта, в классе описывается структура объекта, а когда объект создается, то он создается согласно данным описанным в классе, подобно тому как создается деталь на заводе согласно ее чертежу. При составлении класса код и данные необходимо специфицировать. Все эти элементы называют членами класса. Члены-переменные или переменные экземпляра или поля являются данными. Члены методы или просто методы – код, оперирующий этими данными.
Цель класса – инкапсуляция сложности. Для этого у методов и переменных внутри класса могут быть модификаторы доступа (public, private).
Инкапсуляция означает, что данные объекта недоступны его клиентам непосредственно. Вместо этого они инкапсулируются — скрываются от прямого доступа извне. Инкапсуляция предохраняет данные объекта от нежелательного доступа, позволяя объекту самому управлять доступом к своим данным.
Статья не окончена и будет дописана.
Продолжение: Шаг 6. Лексические элементы языка Java
Начало: Шаг 4. Пример работы с классами и объектами
Бело-красно-чёрные флаги
Случайно задумался о такой вещи. Мой сайт выполнен в трех основных цветах: красном, чёрном, и белом. А какие страны имеют флаги с таким (и только таким) набором цветов? Оказывается таких стран всего две.
Первая из них это Йемен.
Флаг Йемена: Национальный флаг Йемена был принят 22 мая, 1990, в день объединения Северного Йемена и Южного Йемена. Красный, белый и чёрные цвета классические пан-арабистские, они так же присутствуют на флагах таких стран, как Египет, Сирия, Ирак.
Второй страной является Тринидад и Тобаго.
Флаг Тринидада и Тобаго: Флаг представляет собой прямоугольное полотнище красного цвета с диагональной (слева направо) чёрной полосой, по краям которой расположены две узкие белые полоски. Красный цвет флага обозначает жизнеспособность людей и земли страны, тепло и энергию солнца, мужество и дружелюбие народа. Белый цвет олицетворяет Карибское море и Атлантический океан, а также чистоту устремлений и равенство всех людей под Солнцем. Чёрный цвет символизирует связь всех людей Тринидада и Тобаго, единство цели и богатство земли. В совокупности все цвета представляют элементы земли, воды и огня, как вечные символы прошлое, настоящее и будущее. Принят 31 августа 1962 года.