Использование базовых синтаксических конструкций



Использование базовых синтаксических конструкций.

Текстовый ввод-вывод.

  1. Цель работы

Научиться практическому применению языковые конструкцииJava для проверки условий и организации циклов. Воспользоваться стандартными средствамиjava для чтения-записитекстовыхданных.

  1. Пример.

Имеется входной текстовый файл, в каждой строке которого содержится по одному целому числу:

A

B

X1

Xi

здесь все значения A, B,X1...Xi это числа.

Вывести в выходной текстовый файл такие значения последовательности {Xi}, которые принадлежат интервалу [A,B], указанному в первых двух строках входного файла.

Напишем программу наjava с использованием классов семействаReader.

  1. Чтение данных

В Java существует множество интерфейсов и классов, обеспечивающих работу с данными. Основные интерфейсы и классы сосредоточены в пакете java.io.

За чтение-запись данных в Java отвечает несколько интерфейсов разного уровня:

ПотокиInputStream/OutputStream реализуют стандартную парадигму работы с последовательностями байт, так что специально на них останавливаться не будем. Бо'льший интерес представляют высокоуровневые надстройки над ними - классы, реализующие интерфейсыReader/Writer,PrintStream .

Работа с файлами и потоками вообще, организуется классически виде действий "открытие-работа-закрытие", с ответственностью за освобождение ресурсов программистом. Совершенно естественно здесь будет использована конструкцияtry-finally:

// создание и открытие потокаstream

XStreamstream =newXStream(); // здесьXStream некоторый реальный потоковый класс

try {

… использованиепотокаstream

}finally {

// закрытие потока

stream.close();

}

Рассмотрим основные методы java.io.Reader.

В первую очередь это набор перегруженных методовread:

public int read()

public int read(char cbuf[])

public int read(java.nio.CharBuffer target)

abstract public int read(char cbuf[], int off, int len)

Они недостаточно удобны для работы с текстами, т.к. ориентированы на работу с отдельными символами, а не со строками.

Более удобно использовать потомкаReaderBufferedReader,  с его более приспособленными методами получения строкreadLine:

public String readLine()

public String readLine(boolean ignoreLF)

В них данные сразу считываются в виде строк.

ИнтерфейсPrintStream описывает выводт строк и его удобно использовать для формирования текстового вывода и журналирования:

voidprint(Typedata)семейство методов вывода типизированных данных (Type)

и void println(Type data)

PrintStream printf(String format, Object ... args)форматированныйвывод

и PrintStream format(String format, Object ... args)

  1. Пребразования строк в числа

ВJava конверторы из строк в базовые типы встроены в классы-оболочки самих типов.

Т.е. существуют методы получения типизированных значений из строк:

int Integer.parseInt(String);

long Long.parseLong(String);

float Float.parseFloat(String);

double  Double.parseDouble(String);

Воспользуемся этим, выделив получение очередного числа в отдельную функцию:

final static Integer getInt(BufferedReader rd)

       throws IOException

  {

       final String data = rd.readLine();

       // if (data == null) throw new IOException("End-of-file");

       return (data == null) ? null : Integer.parseInt(data);

}

Формирование значенияnull будет индикатором достижения конца входного потока. Именно по этому тип возвращаемого значения функцииInteger, а неint.

  1. Скелет программы.

class Main{

static Integer getInt(BufferedReader rd) …

static void main(String[] args) {

открытие потоков;

try {

int A = getInt(…);

int B = getInt(…);

while (естьданные) {

if ( … очередное значение внутри [A,B] … ) {

… вывести значение …

}

} //while

}finally {

… Закрытие потоков …

}

}

Пример реализации см прилагающийся проект. Для того чтобы включить его в NetBeans используйте "File"/"OpenProject ...".

  1. Задание.

В текстовом файле в первой строке задано целое числоN. Далее в каждой последующей строке  содержится ровно поN чисел. Вывести в выходной текстовый файл построчные суммы.

Пример входного файла:

3

12  35   -10

-9  3  1

7 4  6

0 -100  -2

И соответствующий сформированный ответ:

37

-5

17

-102

На что следует обратить внимание.

  1. main не должна выбрасывать никаких исключений
  2. обработка ошибок не должна сильно искажать код, что в данном случае точно достижимо). Например, можно принять во внимание, что FileNotFoundException порождена от IOException, так что обработается в том же catch-блоке.
  3. ресурсы надо оборачивать в отдельные блоки try-finally, чтобы гарантировано закрывать ресурсы в части finally;
  4. int[]getVector(intnгдеn – кол-во загружаемых значений.




Похожие работы, которые могут быть Вам интерестны.

1. Использование конструкций с фразовыми глаголами to keep, to get, to give, to look

2. Описание системы базовых станций

3. Исследование вклада синтаксических признаков в распознавание анафоричесних отношений

4. Реализация, анализ и синтез базовых алгоритмов ЦОС с использованием систем автоматизированного проектирования

5. Контекстно-дискурсивная характеристика синтаксических структур со значением волеизъявления в английском языке

6. Подводное бетонирование конструкций

7. Перевод конструкций с причастиями

8. Особенности конструкций набивных свай

9. Стропы и траверсы для монтажа конструкций

10. Перерасчет конструкций и расчет их усиления