Глава 1
Для того, чтобы программа, составлющая кроссворд могла работать, надо создать базу данных. У нас такой базой данных будут текстовые файлы, каждый файл должен создержать в себе множество слов, фиксированной длины. Например файл с пятибуквенными словами, или файл с семибуквенными словами. И эти файлы - нашу базу данных - мы можем создать сами при помощи программы, которую сейчас напишем. В качестве базовой программы возьмем программу из главы 6 книги Джуди Бишоп "Java 2". Затем дополним ее новыми возможностями.
Вверх
Задача.
Программа считывает из текстового файла sort.java пословно
и складывает слова в массив, при этом повторяющиеся слова
в массив не включает. Затем выводит данный массив на экран.
Затем сортирует слова в массиве по алфавиту и снова выводит
уже отсортированные слова на экран.
Эта программа из книги Джуди Бишоп "Java 2".
Решение.
Мы попробуем смоделировать проблему, которую можно было бы решить используя рассмотренные методы. Остановимся на следующем сценарии. Из файла поочередно считываются слова и этими словами инициализируется массив, содержащий слова только в единственном экземпляре, после чего элементы массива сортируются и выводятся.
Программа.
С помощью метода selectionSort осуществляется сортировка строк.
Как известно, оператор < нельзя применять для сравнения объектов (в частности объектов String). Поэтому мы воспользуемся методом compareTo или compareToIgnoreCase. Тот же метод будет использован в процессе поиска. Далее следует текст программы.
class SortWords
{
/* Программа "SortWords" автор Джуди Бишоп
void
selectionSort
(String[] a, int n)
{
for (int leftmost = 0; leftmost < n-1; leftmost++)
{
boolean
search
(String[] a, int n, String x)
{
void
report
(String[] a, int n)
{
SortWords() throws IOException
{
String group [] = new String[100];
int count=0;
System.out.print("Original\n");
selectionSort(group, count);
System.out.print("\n\nSorted\n");
public static void main(String[] args) throws IOException
{
Тестирование. Разработана программа, которая для открытия файла использует класс Filer, благодаря чему возможна работа с любыми данными. Применяется метод сортировки selectionSort. Чтобы упростить процедуру считывания и максимально увеличить количество слов, которые могут повторяться, мы реорганизовали файл и ввели пробелы между всеми словами и символами.
Файл sort.java, который следует обработать:
Полученный результат довольно интересен:
Вывод программы позволяет получить представление об используемых Java принципах сортировки операторов, букв и цифр.
Анализ программы:
Объявим массив, в который будем складывать слова, считанные из файла:
Затем откроем файл при помощи метода open класса Filer, которому передадим в параметр
имя файла.
Затем в цикле while будем пословно считывать из fin, и складывать в массив group считанные слова при помощи функции search(). Функция search() не только складывает переданное ей слово в массив group, но и проверяет, не содержится ли оно уже массиве. Если не содержится, то складывает его в массив, если уже содержится, то условие if не выполняется и программа переходит к считыванию следующего слова. По достижении
конца файла, выводится сообщение о том, сколько слов считано из файла в массив group. При этом, повторяю слова в массиве group будут уникальны.
int count=0;
Далее происходит вывод на экран слов из массива group при помощи функци report().
В параметр этой функции передается массив и число элементов, которые необходимо считать:
Затем функция сортировки:
И снова вывод:
Теперь рассмотрим подробнее функции, которые использованы в этой программе:
В функции selectionSort использован алгоритм сортировки методом отбора, который был рассмотрен в главе 6. При этом в качестве параметров функции передается массив и число элементов массива:
void
selectionSort
(String[] a, int n)
{
for (int leftmost = 0; leftmost < n-1; leftmost++)
{
Функции search() передается массив, число элементов массива, и слово, которое необходимо проверить. Если оно в массиве не встретилось, то возвращается true, если встретилось, то false.
boolean
search
(String[] a, int n, String x)
{
Функция report() выводит на экран переданный ей массив слов.
При этом обратите внимание как интересно в функции report() при выводе сделана табуляция:
void
report
(String[] a, int n)
{
Назад |
Начало урока |
Вверх |
Вперед
import java.io.*;
import javagently.*;
import myutilities.*;
* Считывает в массив и затем сортирует до 100
* различных слов.
* Демонстрирует сортировку и поиск в массиве.
*/
int chosen;
for (int j = leftmost+1; j < n; j++)
a[chosen] = a[leftmost];
a[leftmost] = temp;
if (x.compareTo(a[i])==0) return true;
return false;
if (i>0 && i % 7 == 0) System.out.println();
System.out.print("Where are the words? ");
Stream fin = Filer.open("sort.java");
try
{
if (! search(group,count,word))
{
count ++;
System.out.print("========\n");
report(group,count);
System.out.print("======\n");
report(group,count);
SortWords() throws IOException
{
String group [] = new String[100];
System.out.print("Where are the words? ");
Stream fin = Filer.open("sort.java");
try
{
if (! search(group,count,word))
{
count ++;
System.out.print("Original\n");
System.out.print("========\n");
report(group,count);
selectionSort(group, count);
System.out.print("\n\nSorted\n");
System.out.print("======\n");
report(group,count);
int chosen;
for (int j = leftmost+1; j < n; j++)
a[chosen] = a[leftmost];
a[leftmost] = temp;
if (x.compareTo(a[i])==0) return true;
return false;
if (i>0 && i % 7 == 0) System.out.println();
Содержание