Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Бишоп Д. -> "Эффективная робота Java 2" -> 107

Эффективная робота Java 2 - Бишоп Д.

Бишоп Д. Эффективная робота Java 2 — Спб.: Питер, 2002. — 592 c.
ISBN 966-552-107-1
Скачать (прямая ссылка): effektivnayarabotajava2002.djvu
Предыдущая << 1 .. 101 102 103 104 105 106 < 107 > 108 109 110 111 112 113 .. 259 >> Следующая

Строки и массивы символов
В Java существует различие между строками и массивами символов. Следует отметить, что допустимым является их взаимное преобразование. В следующем примере показано, в каких случаях такое преобразование может быть полезно. Основная идея состоит в следующем: чтобы ввести отдельные символы, мы сначала считываем строку и преобразовываем ее в массив, а затем поочередно считываем по одному символу, Если просто считывать символы, нам придется разделить их пробелами, что довольно неестественно при многих обстоятельствах,
Задача, В оборот попали поддельные чеки. Установлено, что все они имеют одинаковые отличительные черты. Например, если в номере чека из 10 цифр имеются;
¦ три и более последовательных нулей;
¦ последовательности из четырех и более цифр, отличных от нуля
то этот чек может быть поддельным. Проверку и обнаружение поддельных чеков требуется автоматизировать.
Решение. При обработке чеков банковскими компьютерами в первую очередь считывается номер. Мы напишем программу, в которой можно вводить номера чеков и анализировать их на наличие указанных характеристик*
Алгоритм. Алгоритм (рис. 7.2) предусматривает ввод номера (цифра за цифрой) и подсчет количества нулей и не нулей. Его работа направлена на поиск определенных последовательностей. Если последовательность прерывается, механизм подсчета
Поддельные чеки
238
Глава 7. Форматирование
запускается заново с этого места. Следовательно, возникнет необходимостъ зафиксировать, что на некотором этапе достигнут критический счет. Лучше всего это сделать посредством булевой переменной.
Проверка чека
і
Для всех цифр
Считывает
цифру
Увеличивает количество нулей. Начинает заново подсчет не нулей. Если есть три нуля, фиксирует факт
В результате
= 0
0 возможной подделки.
Увеличивает количество не нулей.
\ Перезапускает подсчет нулей.
Если есггь четыре не нуля, фиксирует факт возможной подделки.
Рис. 7,2. Алгоритм проверки чеков
Программа* Первая версия программы работает в соответствии с рассмотренным алгоритмом. В ней для ясности применяются два метода* Цифры считываются как символы. Одна из особенностей класса stream заключается в том, что любые элементы должны разделяться непечатаемыми символами — пробелами, символами окончания строки, символами табуляции. Поэтому при вводе цифр, составляющих номер чека, за каждой из них должны следовать разделители. В этом случае можно будет считать цифры с использованием метода readChar*
import j ava, io. * ; import javagently,*;
public class ChequeDetector (
/* Детектор поддельных чеков. Дж.М. Бишап, сентябрь 1997 г,
__ Java 1-1 октябрь 1997 г,
* обновлена в июле 2000 г,
* Проверяет номер чека на наличие
* последовательно идущих >= 3 нулей
* или >= 4 не кулей.
* Цдефры номера должны разделяться пробелами.
static final int noQfDigits = 10;
boolean counterfeit = false; int countOfZeros = 0; int countOfNanzeros =0;
ChequeDetector (J throws lOException t
Stream in = new Stream (System,in);
System.oat *printIn?”** * ** Проверка чеков »*** + "};
System.out.println("Введите номер чека из десяти цифр, +
Демонстрирует применение if-then^else и символов.
*/
Строки и их оброботко
239
"разделенных пробелами,");
System„oun.ptintln("В конце ввода нажмите клавшиу Enter*"};
char digit;
for (int і = 0; і < noOfDigits; i++) {
digit — in.readChar(); if fdigit == ’0'} recordzero(); else
recordNonsero ();
]
if [counterfeit)
System, out .print [П^ПОДДЕЛКА") ; else
System.out.print("\ДЕЙСТВИТЕЛЬНЫЙ ЧЕК");
System,out.println 0;
}
void recordZeroti \ countOfEeros ++; countGfNonzeros — 0; if (countOfZeros -= 3) counterfeit = true;
}
void recordNonzerof) {
countOfNonzeros ++; countOfZeros - 0; if [countOfNonzeros ==¦ 4} counterfeit — true;
}
public static void main[String[] args) throws IOException { new ChequeDetector {) ;
}
л
}
Тестирование. Номера чеков должны быть подобраны так, чтобы можно было проверить особые (желательно все) случаи, вызывающие опасения. Вот несколько примеров, в которых приведены вводимые данные и данные, полученные на выходе.
***** Проверка чеком *****
Введитг* номер чека на десяти хдофр, разделенных пробелами.
В конце ввод* нажмите клавижу finter.
0003300440 ПОДДЕЛКА ***** Проверка чеков *****
Введиз?* номер чека на десята цифр, рдоделашшх пробелами*
В конце жвода вахшгое клавишу Enter.
0033300333
ДЕЙСТВИТЕЛЬНЫЙ ЧЕК ***** Проверка чеков *****
Введите* номер чека иэ десоти цифр, разделенных пробелами.
В конце ввода нажмите клавишу Enter.
4444005500
ПОДДЕЛА
240
Главо 7. Форматирование
Усовершенствование. Теперь мы рассмотрим, как избавиться от ограничения, связанного с употреблением пробелов в качестве разделителей. Вместо того, чтобы использовать метод readchar, мы считаем строку, преобразуем ее в массив и проверим символы по одному. Главный цикл изменится с:
Предыдущая << 1 .. 101 102 103 104 105 106 < 107 > 108 109 110 111 112 113 .. 259 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.