Java: руководство для начинающих (ЛП)

На нашем литературном портале можно бесплатно читать книгу Java: руководство для начинающих (ЛП), Шилдт Герберт-- . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Java: руководство для начинающих (ЛП)
Название: Java: руководство для начинающих (ЛП)
Дата добавления: 16 январь 2020
Количество просмотров: 683
Читать онлайн

Java: руководство для начинающих (ЛП) читать книгу онлайн

Java: руководство для начинающих (ЛП) - читать бесплатно онлайн , автор Шилдт Герберт

"Java: руководство для начинающих"составлено Гербертом Шилдтом, автором популярных во всем мире книг по языкам программирования, таким образом, чтобы читатель смог быстро овладеть основными навыками программирования на Java. Полностью обновленное по версии Java Platform, Standard Edition 7, пятое издание этого учебного пособия начинается с рассмотрения самых основ, включая компилирование и выполнение простых программ на Java. Затем в нем описываются ключевые слова и синтаксические конструкции, составляющие основу Java как языка программирования. Далее следует изложение самых передовых языковых средств Java, включая обобщения и многопоточное программирование. И завершается книга введением в библиотеку Swing. Представленный в книге учебный и справочный материал позволяет легко и быстро научиться программировать на Java. Для облегчения процесса изучения Java книга построена следующим образом: - Основные навыки и понятия. Каждая глава начинается с перечня основных навыков и понятий, которые предстоит усвоить читателю. - Обращение к знатоку. Во врезках под этим заголовком даются полезные рекомендации в форме вопросов и ответов. - Примеры для опробования. Это примеры небольших проектов, наглядно показывающие, как применять приобретенные знания и навыки на практике. - Упражнения для самопроверки. В конце каждой главы приводятся контрольные вопросы и задания для проверки прочности усвоенного материала. - Подробные комментарии к примерам программ. Все примеры программ в этой книге снабжены подробными комментариями, описывающими демонстрируемые языковые средства и приемы программирования на Java. В этом учебном пособии для начинающих программировать на Java подробно рассмотрены все основные средства данного языка программирования: типы данных, операторы, циклы, классы, интерфейсы, методы, исключения, обобщения, пакеты, основные библиотеки классов, средства многопоточного программирования, потоки ввода-вывода, перечисления, апплеты и документирующие комментарии. Применение всех этих языковых средств Java на практике наглядно демонстрируется в небольших проектах для самостоятельного опробования. Книга снабжена массой полезных советов авторитетного автора и множеством примеров программ с подробными комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. А для проверки прочности приобретенных знаний и навыков в конце каждой главы приводятся контрольные вопросы и задания.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 46 47 48 49 50 51 52 53 54 ... 133 ВПЕРЕД
Перейти на страницу:

Этот процесс повторяется для каждой части: Ьса и def. Как видите, процесс рекурсивен по своей сути, поэтому рекурсивный способ лучше всего подходит для реализации быстрой сортировки.

Компаранд можно выбрать двумя способами: случайно либо вычислив среднее значение части элементов массива. Эффективность сортировки окажется оптимальной в том случае, когда компаранд выбран как раз посредине диапазона значений элементов, содержащихся в массиве, но зачастую выбрать такое значение непросто. Если же выбрать компаранд случайным образом, то вполне возможно, что он окажется на краю диапазона. Но и в этом случае алгоритм быстрой сортировки будет действовать правильно. В том варианте быстрой сортировки, который реализуется в данном проекте, в качестве компаранда выбирается элемент, находящийся посередине массива.

Последовательность действий

Создайте новый файл QSDemo. j ava.

Создайте сначала класс Quicksort, код которого приведен ниже. // Пример для опробования 6.3. Простая версия класса Quicksort, // реализующего быструю сортировку, class Quicksort { // организовать вызов конкретного метода быстрой сортировки static void qsort(char items[]) { qs(items, 0, items.length-1); } // Рекурсивная версия метода быстрой сортировки символов, private static void qs(char items[], int left, int right) { int i, j; char x, y; i = left; j = right; x = items[(left+right)/2]; do { while((items[i] < x) && (i < right)) i++; while((x < items[j]) && (j > left)) j—; if(i <= j) { у = items[i]; items[i] = items[j]; items[j] = y; i++; j—; } } while (i <= j); if(left < j) qs(items, left, j); if(i < right) qs(items, i, right); } }

Для упрощения интерфейса в классе Quicksort предоставляется метод qsort (), из которого вызывается метод qs (), фактически выполняющий сортировку. Такой подход позволяет выполнять сортировку, передавая методу лишь имя массива и не осуществляя первоначальное разделение. А поскольку метод qs () используется только в классе, он определяется как private.

Для того чтобы воспользоваться классом Quicksort, достаточно вызвать метод Quicksort. qsort (). Этот метод определен как static, и поэтому для его вызова достаточно указать имя класса, а создавать объект не обязательно. По завершении работы этого метода массив будет отсортирован. Данная версия программы работает только с символьными массивами, но вы можете адаптировать ее для сортировки массивов любого типа.

Ниже приведен весь исходный код программы, демонстрирующей применение класса Quicksort. // Пример для опробования 6.3. Простая версия класса Quicksort, // реализующего быструю сортировку, class Quicksort { // организовать вызов конкретного метода быстрой сортировки static void qsort(char items[]) { qs(items, 0, items.length-1); } // Рекурсивная версия метода быстрой сортировки символов, private static void qs(char items[], int left, int right) { int i, j; char x, y; i = left; j = right; x = items[(left+right)/2]; do { while((items[i] < x) && (i < right)) i++; while((x < items[j]) && (j > left)) j—; if(i <= j) { у = items[i]; items[i] = items[j]; items[j] = y; i++; j—; } } while (i <= j); if(left < j) qs(items, left, j); if(i < right) qs(items, i, right); } } class QSDemo { public static void main(String args[]) { char a [ ] = { 'd 'x', 'a', 'r', 'p 'j', 'i' }; int i; System.out.print("Original array: "); for(i=0; i < a.length; i++) System.out.print(a[i]) ; System.out.println(); // отсортировать массив Quicksort.qsort(a); System.out.print("Sorted array: "); for(i=0; i < a.length; i++) System.out.print(a[i]); } }Вложенные и внутренние классы

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

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

Существуют два типа вложенных классов. Одни вложенные классы объявляются с помощью модификатора доступа static, а другие — без него. В этой книге будет рассматриваться только нестатический вариант вложенных классов. Классы такого типа называются внутренними. Внутренний класс имеет доступ ко всем переменным и методам внешнего (т.е. объемлющего) класса и может обращаться к ним непосредственно, как и все остальные нестатические члены внешнего класса. Иногда внутренний класс используется для предоставления услуг объемлющему классу. Ниже приведен пример применения внутреннего класса для вычисления различных значений в объемлющем его классе.// Применение внутреннего класса,class Outer { int nums[]; Outer(int n[]) { nums = n; } void Analyze() { Inner inOb = new Inner(); System.out.println("Minimum: 11 + inOb.minO); System.out.println("Maximum: " + inOb.maxO); System.out.println("Average : " + inOb.avgO); } // Внутренний класс. class Inner { int min() { int m = nums[0]; for (int i=l; i < nums.length; i++) if(nums[i] < m) m = nums[i]; return m; } int max() { int m = nums[0]; for (int i=l; i < r^urns. length; i++) if(nums[i] > m) m = nums[i]; return m; } int avg() { int a = 0; for(int i=0; i < nums.length; i++) a += nums[i]; return a / nums.length; } }}class NestedClassDemo { public static void main(String args[]) { int x[] = { 3, 2, 1, 5, 6, 9, 7, 8 }; Outer outOb = new Outer(x); outOb.Analyze(); }}

Результат выполнения данной программы выглядит следующим образом:Minimum: 1Maximum: 9Average: 5

В данном примере внутренний класс Inner обрабатывает массив nums, являющийся членом класса Outer. Как упоминалось выше, вложенный класс имеет доступ к членам объемлющего класса, и поэтому он может непосредственно обращаться к массиву nums. А вот обратное не справедливо. Так, например, метод analyze () не может непосредственно вызвать метод min (), не создав объект типа Inner.

Как упоминалось выше, класс можно вложить в области действия блока. В итоге получается локальный класс, недоступный за пределами блока. В следующем примере программы класс ShowBits, созданный в примере для опробования 5.3, преобразуется таким образом, чтобы стать локальным.// Применение класса ShowBits в качестве локального, public static void main(String args[]) { class LocalClassDemo { // Внутренний вариант класса ShowBits. // Локальный класс, вложенный в метод. class ShowBits { int numbits; ShowBits(int n) { numbits = n; } void show(long val) { long mask = 1; // сдвинуть влево для установки единицы в нужной позиции mask <<= numbits-1; int spacer = 0; for(; mask != 0; mask >»= 1) { if((val & mask) != 0) System.out.print("1"); else System, out .pri-nt ("0") ; spacer++; if((spacer % 8) ==0) { System.out.print(" "); spacer = 0; } } System.out.println() ; } } for(byte b = 0; b < 10; b++) { ShowBits byteval = new ShowBits(8); System.out.print(b + " in binary: "); byteval.show(b); } }}

Выполнение этой программы дает следующий результат:0 in binary: 000000001 in binary: 000000012 in binary: 000000103 in binary: 000000114 in binary: 000001005 in binary: 000001016 in binary: 000001107 in binary: 000001118 in binary: 000010009 in binary: 00001001

В данном примере класс ShowBits недоступен за пределами метода main (), а следовательно, попытка получить доступ к нему из любого метода, кроме main (), приведет к ошибке.

И последнее замечание: внутренний класс может быть безымянным. Экземпляр безымянного, или анонимного, внутреннего класса создается при объявлении класса с помощью оператора new. Безымянные внутренние классы будут подробнее рассмотрены в главе 15.Аргументы переменной длины

1 ... 46 47 48 49 50 51 52 53 54 ... 133 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название