Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 65402
Модуль Forms 65175
Пример работы с... 64274
ТЕХНОЛОГИИ ДОСТ... 61821
Имитационное мо... 57741
Реклама
Сейчас на сайте
Гостей: 3
На сайте нет зарегистрированных пользователей

Пользователей: 13,083
новичок: tesli
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

База данных - рабочее место кассира на Delphi + бд Access
Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
Медиа плейер на Delphi + Пояснительная записка

Реклама



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

ПОДПИСЫВАЙСЯ на канал о программировании
Несколько примеров применения класса Scanner
Включение класса Scanner в язык Java превратило прежде утомительное и скучное занятие в легкое и приятное. Для того чтобы понять, почему это произошло, рассмотрим несколько примеров. В листинге 9.12 вычисляется среднее арифметическое последовательности целых значений, вводимых с клавиатуры.
Листинг 9.12. Использование класса Scanner для вычисления среднего арифметического
import java.util.*;

class AvgNums {
public static void main(String args[]) {
Scanner conin = new Scanner(System.in);

int count = 0;
double sum = 0.0;

System.out.println("Enter numbers to average.");

// Read and sum numbers.
while(conin.hasNext()) {
if(conin.hasNextDouble()) {
sum += conin.nextDouble();
count++;
}
else {
String str = conin.next();
if(str.equals("done")) break;
else {
System.out.println("Data format error.");
return;
}
}
}

System.out.println("Average is " + sum / count);
}
}



В листинге 9.12 числа считываются с клавиатуры и суммируются до тех пор, пока пользователь не введет строку "done". Эта строка прекращает ввод и на экран выводится среднее арифметическое введенных чисел. Далее приведен образец вывода программы из листинга 9.12:
Enter numbers to average.
1.2
2
3.4
4
done
Average is 2.65



В программе из листинга 9.12 считываются числа, пока не обнаружена лексема, которая не соответствует корректному значению типа double. Когда это происходит, программа проверяет, не равна ли эта лексема строке "done". Если это так, программа завершается корректно. В противном случае выводится сообщение об ошибке.
Обратите внимание на то, что числа читаются с помощью вызова метода nextDouble(). Этот метод считывает любое число, которое может быть преобразовано в тип double, включая целые значения, такие как 2, и значения с плавающей точкой, такие как 3.4. Таким образом, у числа, считываемого методом nextDouble(), необязательно должна быть десятичная точка. Этот базовый принцип положен в основу всех методов next. Они могут находить соответствие и читать данные любого формата, который способен представлять данные требуемого типа.
Приятная особенность, свойственная классу Scanner, заключается в том, что способ, применяемый для считывания данных из одного источника, используется для чтения и из другого источника. В листинге 9.13 приведен пример, в котором подсчитывается среднее арифметическое последовательности чисел, содержащихся в текстовом файле.
Листинг 9.13. Применение класса Scanner для расчета среднего арифметического чисел, считываемых из файла
import java.util.*;
import java.io.*;

class AvgFile {
public static void main(String args[])
throws IOException {

int count = 0;
double sum = 0.0;

// Write output to a file.
FileWriter fout = new FileWriter("test.txt");
fout.write("2 3.4 5 6 7.4 9.1 10.5 done");
fout.close();

FileReader fin = new FileReader("Test.txt");

Scanner src = new Scanner(fin);

// Read and sum numbers.
while(src.hasNext()) {
if(src.hasNextDouble()) {
sum += src.nextDouble();
count++;
}
else {
String str = src.next();
if(str.equals("done")) break;
else {
System.out.println("File format error.");
return;
}
}
}

fin.close();
System.out.println("Average is " + sum / count);
}
}



В следующей строке приведен вывод программы из листинга 9.13:
Average is 6.2

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

Листинг 9.14. Применение класса Scanner для считывания данных разных типов, хранящихся в файле
import java.util.*;
import java.io.*;

class ScanMixed {
public static void main(String args[])
throws IOException {

int i;
double d;
boolean b;
String str;

// Write output to a file.
FileWriter fout = new FileWriter("test.txt");
fout.write("Testing Scanner 10 12.2 one true two false");
fout.close();

FileReader fin = new FileReader("Test.txt");

Scanner src = new Scanner(fin);


// Read to end.
while(src.hasNext()) {
if(src.hasNextInt()) {
i = src.nextInt();
System.out.println("int: " + i);
}
else if(src.hasNextDouble()) {
d = src.nextDouble();
System.out.println("double: " + d);
}
else if(src.hasNextBoolean()) {
b = src.nextBoolean();
System.out.println("boolean: " + b);
}
else {
str = src.next();
System.out.println("String: " + str);
}
}
fin.close();
}
}




Далее приведен вывод результатов работы программы из листинга 9.14:
String: Testing
String: Scanner
int: 10
double: 12.2
String: one
boolean: true
String: two
boolean: false




При считывании данных разных типов, как в листинге 9.14, необходимо внимательно следить за порядком вызова методов next. Например, если в цикле поменять порядок вызова методов nextInt() и nextDouble(), оба числа будут считаны как значения типа double, поскольку метод nextDoublе() приводит в соответствие любую строку, которая может быть представлена как тип double.
Опубликовал Kest January 13 2009 22:12:58 · 0 Комментариев · 32804 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Strawberry Prolog...
PBFoldder
PHP 5 на примерах
ZipTV
Error mod
Rotolabel
Cooltray
Шаблон для новост...
Алгоритм DES шифр...
Delphi 2005 Секре...
Cтатьи Королевств...
Adapter (пример D...
Игра змейка
C# 2005 и платфор...
Программирование ...
SysInfo [Исходник...
БД сеть компьютер...
SODA [Исходник на...
SMLPack v1.0
AlignEdit

Топ загрузок
Приложение Клие... 100468
Delphi 7 Enterp... 87028
Converter AMR<-... 20078
GPSS World Stud... 12798
Borland C++Buil... 11821
Borland Delphi ... 8600
Turbo Pascal fo... 7039
Visual Studio 2... 4999
Калькулятор [Ис... 4796
FreeSMS v1.3.1 3542
Случайные статьи
Функции выполняют ...
Проблемы внедрения
Связывание фреймов
Программирование в...
ЧТО такое XSL
Способен ли сервер...
Базовая структура ...
Потоки и скорости
Буферизация
а: определение эфф...
Программироание: а...
Какие ещё варианты...
Разновидности прот...
Windows Server vNe...
Выбор заставки
Игровые автоматы с...
В меню DVD выберит...
Что делает локальн...
"." expected
Элементы управлени...
выполнить привязку...
Объектно-ориентиро...
Задание области пе...
Реализация требова...
Disk full
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?