метод сортировки массива




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. Закончить.

ЗАДАНИЯ

Задания выполнять с использованием объектов класса StringBuffer. Для выделения слов применить метод, алгоритм которого приведен в задаче 11.1 данной лабораторной работы (метод split() не использовать).

Задание 11.1. Работа с классом StringBuffer. Ввести в ЭВМ предложение. Выделить слова из предложения в массив для случая, когда количество пробелов между словами произвольно, вывести их на экран.

Задание 11.2. Ввести в ЭВМ предложение. Выделить слова и отсортировать их в алфавитном порядке.

Задание 11.3. Ввести в ЭВМ предложение. Выделить слова и отсортировать их по возрастанию (убыванию длины).

Задание 11.4. Ввести в ЭВМ предложение. Организовать поиск слова, введенного с клавиатуры, в предложении. Выдать сообщение о его наличии и его номер.

СОДЕРЖАНИЕ ОТЧЕТА

Готовится один отчет на бригаду в печатном виде для заданий, указанных в лабораторной работе. Он должен содержать следующие разделы:

- титульный лист;

- задание;

- словесное описание алгоритма;

- схему алгоритма;

- текст программы на языке Java.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Для каких объектов используются классы StringBuilder и StringBuffer и чем они отличаются друг от друга и от класса String?

2. Какие методы классов StringBuilder и StringBuffer являются наиболее распространенными?

3. Можно ли для объектов этих классов использовать методы класса String?

4. Как выполняется преобразование строки классов StringBuilder и StringBuffer в String?

5. Приведите алгоритм выделения слов с произвольным количеством пробелов.


Лабораторная работа № 12
РАЗРАБОТКА СОБСТВЕННЫХ МЕТОДОВ

Цель работы – получение навыков работы по созданию собственных методов.

Источники: [3, с. 130-153], [4, с. 159-170].

КРАТКАЯ ТЕОРИЯ

Общие правила создания методов класса

В разрабатываемых приложениях до сих пор использовался один класс с методом main(), в котором реализовался весь алгоритм программы. Следует отметить, что пользователь может создавать собственные методы в классе для выполнения каких-то действий. Использование этих методов в программе ничем не отличается от использования методов классов из стандартных библиотек Java, продемонстрированных в предыдущих лабораторных работах для объектов классов String, StringBuffer (StringBuilder) (табл. 10.1 и 11.1).

Рассмотрим пример создания методов для следующей задачи.

Задача 12.1. Ввести одномерный массив и отсортировать его.

Алгоритм будет выглядеть так:

1. Ввести массив из n чисел.

2. Вывести массив.

3. Отсортировать массив.

4. Вывести отсортированный массив.

5. Закончить.

 

Практически каждый пункт этого алгоритма не является односложным элементарным действием, его можно рассматривать как отдельную подзадачу и создать для него свой метод. Принимать решение о создании конкретных методов прежде всего следует:

1) исходя из многократности использования однотипных действий в программе (например, вывод массива даже в вышеописанной простой задаче производится 2 раза);

2) исходя из универсальности алгоритма подзадачи (например, алгоритм сортировки).

Для рассматриваемой задачи на рис. 12.1 схематично показана структура класса без методов разработчика, на рис. 12.2 – структура класса с методами вывода и сортировки массива.

 

package Massiv_1;

 
импортируемые библиотеки

 

public class Massiv1{

 

 
public static void main(String[] args) {

Ввести массив из n чисел.

Вывести массив

Отсортировать массив

Вывести отсортированный массив.

}

Рис. 12.1
}

package Massiv_2;

 
импортируемые библиотеки

 

public class Massiv2{

 
 


 
описание методов
метод вывода массива

 
 
 


метод сортировки массива

 
public static void main(String[] args) {

Ввести массив из n чисел.

Вызвать метод вывода массива

Вызвать метод сортировки массива

Вызвать метод вывода массива

}

Рис. 12.2
}

Далее перейдем к более подробному рассмотрению методов: их структуры, правил вызова.

Описание методов класса

Метод может иметь модификаторы доступа, возвращать значение и получать параметры.

В общем виде описание метода выглядит следующим образом:

 

<модификаторы><тип_возвр_знач> имя (<тип> арг1, <тип> арг2, …)

{

<тело метода>

}

 

где <тип_вовр_знач > – это тип возвращаемого методом значения. Если метод ничего не возвращает, то указывается слово void.

<тип> арг1, <тип> арг2, … – аргументы, предаваемые в метод с указанием типа. Список может быть пустой, и, соответственно, в скобках ничего не будет указываться.

Для текущих лабораторных работ будут использоваться следующие модификаторы:

– модификатор доступа public, обозначающий, что данный метод будет доступен везде, где доступен класс, в котором он определен. Причем модификатор public можно не указывать, так как он является модификатором по умолчанию;

– модификатор метода класса static – объявляет метод статическим, что позволяет вызывать его без создания экземпляра класса. Метод, не имеющий модификатора static, называется методом экземпляра и может быть вызван только для созданного экземпляра класса.

Вызов методов класса

Далее на примере показано как производится вызов методов, возвращающих и не возвращающих значение. Также можно сравнить вызов методов экземпляра класса и статических методов.

 

Пример 12.1

 

class Primer {

 

public void method1 (){

} // метод void ничего не возвращает

 

 

public int method2 (){…

int x1=…;

return x1; // возвращаемое значение

}

 

 

static void method3 (){

 

} // ничего не возвращает

 
 
статические методы

 


static int method4 (){…

int x2=…;

return x2; // возвращаемое значение

}

 

public static void main (String[] args) {

 

// вызов методов экземпляра класса – создается новый объект

Primer obj = new Primer ();

obj. method1 (); // вызов без возвращаемого значения

int y= obj. method2 (); // возвращает значение в переменную y

 

// вызов статических методов

method3(); // или используется имя класса Primer.method3();

// возвращает значение в переменную z

int z= method4 (); // или z=Primer.method4();

 

}

}

 

 

Передача параметров

В программировании часто используются параметризированные методы, т.е. на входе им передаются какие-то параметры в качестве аргументов.

В языке Java все параметры передаются по значению. Из этого следует, что значение параметра после выхода из процедуры не изменяется. Внутри метода можно произвольно изменять параметр, но это никак не повлияет на переменную, которая была указана в качестве параметра вызова. Дело в том, что при передаче параметра выделяется необходимая область памяти, куда копируется значение параметра и внутри метода работа идет с копией. Она будет уничтожена при выходе из метода.

При передаче параметра ссылочного типа его значением является ссылка на объект и, соответственно, ее изменить нельзя, но можно изменить объект, на который она указывает.

 

Пример 12.2. Передача параметров для примитивных типов.

 

public class Methods_int {

static void parameters (int x){

x+=10;

}

 

public static void main (String[] args) {

int y=1;

System.out.println("До вызова метода y="+y);

parameters(y);

 

System.out.println("После вызова метода y="+y);

}

 

Результатом выполнения данного кода будет:

До вызова метода y=1

После вызова метода y=1

 

Пример 12.3. Передача параметров для ссылочного типа – массива.

 

public class MethodsRef_Array {

static void parameters (int x[]){

x[0]=10;

}

public static void main (String[] args) {

int y[]={1};

System.out.println("Lо вызова метода y="+y[0]);

parameters(y); // ссылка-значение не изменяется, изменяется строка,

// находящаяся по этой ссылке

System.out.println("После вызова метода y="+y[0]);

}

 

Результатом выполнения данного кода будет:

До вызова метода y=1

После вызова метода y=10

 

Пример 12.4. Передача параметров для ссылочного типа – StringBuffer (тип String использовать нельзя, так как строки не изменяются).

 

public class MethodsRef_Stroki {

 

static void parameters (StringBuffer str){

str=str.append("!!!");

}

public static void main (String[] args) {

String s="Изучаем программирование";

StringBuffer sb=new StringBuffer(s);

System.out.println("До вызова метода строка = "+sb);

parameters(sb); // значение ссылки не изменяется, изменяется

// массив, находящийся по этой ссылке

System.out.println("После вызова метода строка ="+sb);

}

 

Результатом выполнения данного кода будет:

До вызова метода строка = Изучаем программирование

После вызова метода строка = Изучаем программирование!!!

ЗАДАНИЯ

Задание 12.1. Используя пример 12.1 данной лабораторной работы, самостоятельно придумать действия объявленных методов и протестировать в среде NetBeans.

Задание 12.2. На примерах 12.2-12.4 проверить работу передаваемых параметров.

 

Задание 12.3. В новом проекте на базе задач предыдущих занятий разработать класс с использованием методов с передаваемыми параметрами:

а) метод экземпляра класса, подсчитывающий количество эталонных символов в строке.

Входные данные: строка, строка с эталонными символами.

Выходные данные: количество эталонных символов;

 

б) метод экземпляра класса, подсчитывающий количество приставок в строке.

Входные данные: строка, приставка.

Выходные данные: количество приставок;

 

в) статический метод исправления строки.

Входные данные: строка.

Выходные данные: исправленная строка (с «ча-ща» и др.).

 

Метод main должен обеспечивать ввод предложения, эталонной строки, приставки, передачу их в качестве параметров в разработанные методы и вывод результата.

 

 

Задание 12.4. Разработать класс с использованием следующих методов:

а) метод экземпляра класса, позволяющий выделять слова из строки (Split () не использовать!).

Входные данные: строка.

Выходные данные: массив слов;

 

б) метод экземпляра класса, позволяющий отсортировать массив строк.

Входные данные: массив слов.

Выходные данные: отсортированный массив слов;

Метод main должен обеспечивать ввод предложения и вывод его слов в обычном и отсортированном порядке.

СОДЕРЖАНИЕ ОТЧЕТА

Готовится один отчет на бригаду в печатном виде для заданий, указанных в лабораторной работе. Он должен содержать следующие разделы:

- титульный лист;

- задание;

- словесное описание алгоритма;

- текст программы на языке Java.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Что представляет собой метода класса?

2. Для чего нужны методы в программах?

3. Каковы правила оформления методов?

4. Как задаются параметры метода и тип возвращаемого им результата?

5. Как передаются параметры метода?

6. Перечислить и пояснить используемые в задачах модификаторы методов.

7. Как осуществляется вызов методов в классе и в методе main?

8. Каковы особенности вызова статических методов и методов экземпляра класса?

 

 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Ефимушкина, Н.В. Программирование на языке высокого уровня / Н.В. Ефимушкина, С.П. Орлов, В.М. Чухонцев. – Самара: Самар. гос. техн.
ун-т, 2002. – 182 с.

2. Культин, Н.Б. Turbo Pascal в задачах и примерах / Н.Б. Культин. – СПб.: БХВ – Санкт-Петербург. – 2000. – 256 с. – ISBN 5-8206-0061-4.

3. Шилдт, Г. Java: руководство для начинающих. – 5-е изд. / Г. Шилдт. – М.: ИД «ВИЛЬЯМС», 2012. – 624 с. – ISBN 978-5-8459-1770-6.

4. Хорстманн, К.С. Java. Библиотека профессионала, том 1. Основы.
9-е изд. / К. Хорстманн, Г. Корнелл; пер. с англ. – М.: ИД «ВИЛЬЯМС», 2014.–864 с. – ISBN 978-5-8459-1869-7.

 


СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ. 3

Лабораторная работа № 1. РАЗРАБОТКА СХЕМ АЛГОРИТМОВ.. 5

КРАТКАЯ ТЕОРИЯ.. 5

Этапы решения задач на ЭВМ.. 5

Определение алгоритма и способы его описания. 6

Правила оформления схем алгоритмов. 6

Типы алгоритмов. 10

Построение схем алгоритмов
с помощью текстового редактора WORD.. 15

ЗАДАНИЯ.. 19

СОДЕРЖАНИЕ ОТЧЕТА.. 26

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 26

Лабораторная работа № 2. РАБОТА В СРЕДЕ NETBEANS. СОЗДАНИЕ ПРОСТЕЙШИХ ПРОГРАМММ С ЛИНЕЙНЫМ АЛГОРИТМОМ.. 27

КРАТКАЯ ТЕОРИЯ.. 27

Установка IDE NetBeans. 27

Общие правила создания приложений. 27

Работа с проектом NetBeans. 28

Пример создания простейшего приложения. 31

Общие правила построения класса. 33

Типы данных. 36

Объявление переменных. 37

Оператор присваивания. 37

Приведение типов. 39

Организация ввода данных. 39

Организация вывода данных. 40

ЗАДАНИЯ.. 41

СОДЕРЖАНИЕ ОТЧЕТА.. 44

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 44

Лабораторная работа № 3. РАЗРАБОТКА ПРОСТЕЙШИХ ПРИЛОЖЕНИЙ НА БАЗЕ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ.. 45

КРАТКАЯ ТЕОРИЯ.. 45

Средства переименования в среде NetBeans. 45

Отладка кода в среде NetBeans. 46

Условный оператор if-else. 51

Условный оператор switch. 53

ЗАДАНИЯ.. 55

СОДЕРЖАНИЕ ОТЧЕТА.. 63

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 63

Лабораторная работа № 4. РАЗРАБОТКА ПРОГРАММ С ЦИКЛАМИ СО СЧЕТЧИКОМ 64

КРАТКАЯ ТЕОРИЯ.. 64

Циклы со счетчиком. 64

Особенности алгоритмов и программ с накапливанием. 70

Методы класса Math. 71

ЗАДАНИЯ.. 72

СОДЕРЖАНИЕ ОТЧЕТА.. 74

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 74

Лабораторная работа № 5. РАБОТА С ИТЕРАЦИОННЫМИ ЦИКЛАМИ. ОДНОМЕРНЫЕ МАССИВЫ.. 75

КРАТКАЯ ТЕОРИЯ.. 75

Итерационные циклы.. 75

Цикл while. 75

Цикл do-while. 77

Одномерные массивы.. 79

Подсчет суммы, количества и среднего значения в одномерных массивах 83

Нахождение минимума и максимума. 84

ЗАДАНИЯ.. 88

СОДЕРЖАНИЕ ОТЧЕТА.. 90

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 90

Лабораторная работа № 6. АЛГОРИТМЫСОРТИРОВКИ И РАЗБИЕНИЯ ОДНОМЕРНЫХ МАССИВОВ.. 92

КРАТКАЯ ТЕОРИЯ.. 92

Сортировка одномерных массивов. 92

Разбиение одномерных массивов. 94

ЗАДАНИЯ.. 96

СОДЕРЖАНИЕ ОТЧЕТА.. 99

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 99

Лабораторная работа № 7. ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ.. 100

КРАТКАЯ ТЕОРИЯ.. 100

Понятие многомерных массивов. Ввод и вывод матриц. 100

Типовые алгоритмы обработки матриц. 101

Алгоритмы обработки матриц в целом. 101

Алгоритмы обработки матриц по строкам и столбцам. 103

ЗАДАНИЯ.. 105

СОДЕРЖАНИЕ ОТЧЕТА.. 108

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 108

Лабораторная работа № 8. ДИАГОНАЛИ МАТРИЦЫ, УМНОЖЕНИЕ МАТРИЦ 109

КРАТКАЯ ТЕОРИЯ.. 109

Обработка главной и побочной диагоналей матриц. 109

Работа с диагоналями матриц выше и ниже главной/побочной. 111

Умножение матриц. 114

ЗАДАНИЯ.. 115

СОДЕРЖАНИЕ ОТЧЕТА.. 117

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 118

Лабораторная работа № 9. ОБРАБОТКА СТРОК КЛАССА STRING.. 119

КРАТКАЯ ТЕОРИЯ.. 119

Создание объектов класса String. 119

Методы класса String. 120

ЗАДАНИЯ.. 123

СОДЕРЖАНИЕ ОТЧЕТА.. 128

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 128

Лабораторная работа № 10. АЛГОРИТМЫИ ПРОГРАММЫОБРАБОТКИ ФРАГМЕНТОВ СТРОК КЛАССА STRING.. 129

КРАТКАЯ ТЕОРИЯ.. 129

Сравнение символов строк класса String. 129

Типовые задачи обработки массивов строк (слов из текста) 131

ЗАДАНИЯ.. 132

СОДЕРЖАНИЕ ОТЧЕТА.. 139

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 139

Лабораторная работа № 11. РАЗРАБОТКА АЛГОРИТМОВ И ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ КЛАССОВ StringBuffer/StringBuilder 140

КРАТКАЯ ТЕОРИЯ.. 140

Создание и обработка объектов классов StringBuffer и StringBuilder 140

ЗАДАНИЯ.. 144

СОДЕРЖАНИЕ ОТЧЕТА.. 145

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 145

Лабораторная работа № 12. РАЗРАБОТКА СОБСТВЕННЫХ МЕТОДОВ.. 146

КРАТКАЯ ТЕОРИЯ.. 146

Общие правила создания методов класса. 146

Описание методов класса. 148

Вызов методов класса. 148

Передача параметров. 150

ЗАДАНИЯ.. 152

СОДЕРЖАНИЕ ОТЧЕТА.. 153

КОНТРОЛЬНЫЕ ВОПРОСЫ.. 153

БИБЛИОГРАФИЧЕСКИЙ СПИСОК.. 154

 


 

Учебное издание

 

Леднева Светлана Юрьевна

ЕФИМУШКИНА Наталья Владимировна

Цыганов Александр Анатольевич

Программирование на Java

 

Редактор Ю.А. Петропольская

Верстка И.О. Миняева

Выпускающий редактор Н.В. Беганова

 

Подп. в печать 27.05.15

Формат 60×84 1/16. Бумага офсетная

Усл. п.л. 9,27. Уч.-изд. л. 9,2

Тираж 75 экз. Рег. № 79/15

 

 
 


Федеральное государственное бюджетное

образовательное учреждение

высшего профессионального образования

«Самарский государственный технический университет»

443100, г. Самара, ул. Молодогвардейская, 244. Главный корпус

 

Отпечатано в типографии

Самарского государственного технического университета

443100, г. Самара, ул. Молодогвардейская, 244. Корпус № 8

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: