Навигация
Главная
Поиск
Форум
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
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 17
На сайте нет зарегистрированных пользователей

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

Лабораторная работа по динамическим спискам на Turbo Pascal (удаление ду...
База данных междугородних телефонных разговоров на Delphi
Компьютерный магазин на Turbo Pascal (База данных) + Пояснительная записка

Несколько примеров применения класса 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 19:12:58 · 0 Комментариев · 34528 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Progressbar
Меню проводника в...
Андрей Боровский....
THttpScan v4.1
UmEdit
MicroGPSS Studen ...
С. Г. Горнаков - ...
DateEdit
Rss Parser
NetGraph [Исходни...
Программа предназ...
Printgrid
Dealer
PRNDbgrid
Dynamic Titles дл...
Удаление своего EXE
PHP 5
около 291 статьи ...
3D Октаэдр
Размещение элемен...

Топ загрузок
Приложение Клие... 100772
Delphi 7 Enterp... 97809
Converter AMR<-... 20261
GPSS World Stud... 17014
Borland C++Buil... 14189
Borland Delphi ... 10267
Turbo Pascal fo... 7372
Калькулятор [Ис... 5972
Visual Studio 2... 5206
Microsoft SQL S... 3661
Случайные статьи
Плей Фортуна казино
Моделирование расп...
2.1. Вездесущий дв...
ДОСТОИНСТВА И НЕДО...
СВОЙСТВО ИЛИ ПОЛЕ?
РАБОТА С ПРОЦЕДУРН...
Модели контроллера
Кроме общедостутюг...
Как продать свою в...
Настройте DACL на ...
Сильно разреженные...
Настройка параметр...
Компоненты доступа...
Официальный сайт В...
Интересные предлож...
atomic(X)
Распродажа Черная ...
Тестирование прост...
Получение XML-схем...
Синтаксис - МПролог
Официальный сайт к...
Дополнительные сфе...
Многоплановые прот...
Второе разрешает/з...
Виртуальные слоты
Статистика



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


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