- •Часть 1
- •Часть 1
- •Введение
- •Лабораторная работа № 1 разработка схем алгоритмов
- •Краткая теория Этапы решения задач на эвм
- •Определение алгоритма и способы его описания
- •Правила оформления схем алгоритмов
- •Типы алгоритмов
- •Задания
- •Построение схем алгоритмов с помощью текстового редактора word
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 2 работа в среде netbeans. Создание простейших программ с линейным алгоритмом
- •Краткая теория Установка ide NetBeans
- •Общие правила создания приложений
- •Работа с проектом NetBeans
- •Пример создания простейшего приложения
- •Общие правила построения класса
- •Типы данных
- •Объявление переменных
- •Оператор присваивания
- •Приведение типов
- •Организация ввода данных
- •Организация вывода данных
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 3 разработка простейших приложений на базе разветвляющихся алгоритмов
- •Краткая теория Средства переименования в среде NetBeans
- •Отладка кода в среде NetBeans
- •Условный оператор if-else
- •Условный оператор switch
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 4 разработка программ с циклами со счетчиком
- •Краткая теория Циклы со счетчиком
- •Особенности алгоритмов и программ с накапливанием
- •Методы класса Math
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 5 работа с итерационными циклами. Одномерные массивы
- •Краткая теория Итерационные циклы
- •Цикл while
- •Цикл do-while
- •Одномерные массивы
- •Подсчет суммы, количества и среднего значения в одномерных массивах
- •Нахождение минимума и максимума
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 6 алгоритмы сортировки и разбиения одномерных массивов
- •Краткая теория Сортировка одномерных массивов
- •Разбиение одномерных массивов
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 7 обработка двумерных массивов
- •Краткая теория Понятие многомерных массивов. Ввод и вывод матриц
- •Типовые алгоритмы обработки матриц
- •Алгоритмы обработки матриц в целом
- •Алгоритмы обработки матриц по строкам и столбцам
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 8 диагонали матрицы, умножение матриц
- •Краткая теория Обработка главной и побочной диагоналей матриц
- •Работа с диагоналями матриц выше и ниже главной/побочной
- •Умножение матриц
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 9 обработка строк класса string
- •Краткая теория Создание объектов класса String
- •Методы класса String
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 10 алгоритмы и программы обработки фрагментов строк класса string
- •Краткая теория Сравнение символов строк класса String
- •Типовые задачи обработки массивов строк (слов из текста)
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 11 разработка алгоритмов и программ с использованием классов StringBuffer/StringBuilder
- •Краткая теория Создание и обработка объектов классов stringbuffer и stringbuilder
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 12 разработка собственных методов
- •Краткая теория Общие правила создания методов класса
- •Описание методов класса
- •Вызов методов класса
- •Передача параметров
- •Содержание
- •Задания
- •Содержание отчета
- •Контрольные вопросы
- •Библиографический список
- •Программирование на Java
- •443100, Г. Самара, ул. Молодогвардейская, 244. Главный корпус
- •443100, Г. Самара, ул. Молодогвардейская, 244. Корпус № 8
Содержание отчета
Готовится один отчет на бригаду согласно заданному варианту в печатном виде. Он должен содержать следующие разделы:
титульный лист;
задание;
словесное описание алгоритма;
текст программы на языке Java.
Контрольные вопросы
1. В каких задачах используются эталонные строки?
2. Как подсчитать общее количество эталонных символов в тексте?
3. Как подсчитать количество вхождений каждого эталонного символа в текст?
4. Как определить наиболее частый или редкий эталонный символ в тексте?
5. Как сравнить длины слов в предложении?
6. Как определить первую (последнюю) букву в слове или предложении?
7. Какие средства используются для исправления ошибок в тексте?
Лабораторная работа № 11 разработка алгоритмов и программ с использованием классов StringBuffer/StringBuilder
Цель работы – получение навыков работы со строками классов StringBuffer и StringBuilder.
Источники: [3, с. 181-183].
Краткая теория Создание и обработка объектов классов stringbuffer и stringbuilder
Классы StringBuffer и StringBuilder являются «близнецами» и по своему предназначению близки к классу String, но, в отличие от последнего, содержимое и размеры объектов классов StringBuilder и StringBuffer можно изменять. Основным и единственным отличием StringBuilder от StringBuffer является потокобезопасность последнего и, следовательно, он более быстрый в обработке. Для решения задач лабораторного практикума это не имеет значения. Далее будут рассмотрены примеры с использованием обоих классов.
Примеры создания строк с помощью основных конструкторов:
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer(str); // str – переменная типа String
StringBuffer sb3 = new StringBuffer(20); // 20 – размер буфера
Видно, что конструктор класса StringBuffer может принимать в качестве параметра объект String или неотрицательный размер буфера.
Объекты классов StringBuffer и StringBuilder можно преобразовать в объект класса String методом toString() или с помощью конструктора класса String.
В классах присутствуют методы, аналогичные методам класса String, такие как replace(), substring(), charAt(), length(), getChars(), indexOf() и др., а также собственные методы, часть из них представлена в табл. 11.1.
Т
аблица
11.1
Название метода |
Тип возвращаемого значения |
Выполняемые действия |
Пример |
append(String s)
|
StringBuffer |
Добавление к содержимому объекта строкового представления аргумента, который может быть символом, значением базового типа, массивом и строкой |
sb2=sb1.append(" Java");
s.append(" Java");
|
insert(int index, String s) insert(int index, Char ch) |
StringBuffer |
Вставка символа, объекта или строки в указанную позицию |
String ss="--или--"; sb.insert(2,ss); // начиная с 3-го символа вставлена подстрока |
deleteCharAt(int index)
|
StringBuffer |
Удаление символа |
sb.deleteCharAt(1); // удален 2-й символ строки sb |
delete(int start, int n) |
StringBuffer |
Удаление подстроки |
sb.delete(0, 4); // начиная c 0-го символа удалены 4символа |
setCharAt(int index, char ch) |
StringBuffer |
Замена символа в указанной позиции на другой |
sb.setCharAt(0, 'k'); // заменен 0-й символ строки на ‘k’ |
reverse()
|
StringBuffer |
Обращение содержимого объекта |
sb= sb.reverse() |
setLength(int n) |
void |
Установка размера буфера |
sb.setLength(20); |
capacity() |
int |
Возвращение текущего размера буфера |
int n=s.capacity(); |
toString |
String |
Преобразование строки типа StringBuffer к строке типа String |
StringBuffer sb; sb = new StringBuffer(“Ура!”); String s=sb.toString(); |
Использование методов класса StringBuffer продемонстрировано на следующих примерах.
Пример 11.1. Свойства объекта StringBuffer
package primer11_1;
public class DemoStringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println("длина ->" + sb.length());
System.out.println("размер ->" + sb.capacity());
// sb = "Java"; // ошибка; так можно только для класса String
sb.append("Java");
System.out.println("строка ->" + sb);
System.out.println("длина ->" + sb.length());
System.out.println("размер ->" + sb.capacity());
System.out.println("реверс ->" + sb.reverse());
} }
Результатом выполнения данного кода будет:
длина ->0
размер ->16
строка ->Java
длина ->4
размер ->16
реверс ->avaJ
При создании объекта StringBuffer конструктор по умолчанию автоматически резервирует некоторый объем памяти (16 символов), что в дальнейшем позволяет быстро менять содержимое объекта, оставаясь в границах участка памяти, выделенного под объект. Размер резервируемой памяти при необходимости можно указывать в конструкторе. Если длина строки StringBuffer после изменения превышает его размер, то ёмкость объекта автоматически увеличивается, оставляя при этом резерв для дальнейших изменений. С помощью метода reverse() можно быстро изменить порядок символов в объекте.
Если метод, вызываемый объектом StringBuffer, производит изменения в его содержимом, то это не приводит к созданию нового объекта, как в случае объекта String, а изменяет текущий объект StringBuffer.
Пример 11.2. Изменение объекта StringBuffer
package primer11_2;
public class NewStringBuffer {
public static void main(String[] args) {
StringBuffer str = new StringBuffer("Microsoft ");
s.append(" Word");
System.out.println(str);
}}
В результате выполнения этого кода будет выведена строка:
Microsoft Word
Для класса StringBuffer не переопределен метод equals(), т.е. сравнить содержимое двух объектов невозможно.
Пример 11.3. Сравнение объектов StringBuffer
package primer3;
public class EqualsStringBuffer {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer("Sun");
StringBuffer sb2 = new StringBuffer("Sun");
System.out.print(sb1.equals(sb2));
} }
Результатом выполнения данной программы будет значение false.
Задача 11.1. Ввести в ЭВМ предложение, в котором слова могут быть разделены одним или несколькими пробелами. Выделить слова и вывести их на экран. Использовать класс StringBuilder.
В этом случае особенностью является то, что номер слова необходимо менять при встрече только с первым пробелом, а все последующие пробелы – пропускать.
Алгоритм:
1.1. Ввести предложение prStr (класс String);
1.2. Удалить пробелы в начале и в конце строки
1.3. Создать предложение StringBuilder prSb на основе prStr
1.4. Объявить массив строк StringBuilder // например: // StringBuilder []slovo=new StringBuilder[m];
2.1. Задать начальный номер слова k =0; // начальное значение
2.2. Создать объект слова k-того // например: // slovo[k] =new StringBuilder();
2.3. Задать начальный номер буквы предложения i=0;
2.4. Пока i < длины предложения prSb повторять
2.4.1. Если буква i-тая предложения != пробелу, то
а) к слову k-тому добавляется буква i-тая предложения;
б) переход к следующему символу i++
Иначе
а) номер слова увеличить k++
б) Создать слово k-тое // slovo[k]=new StringBuilder();
в) Пока (i < длины предложения) и (буква i-тая предложения = пробелу выполнять
пропускать символы i++;
3. Переписать массив слов StringBuilder в другой массив класса String с количеством элементов k.
4.1. Для i от 0 до номера последнего слова (k-того) выполнять
вывести слово i-тое нового массива слов типа String.
5. Закончить.
