Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Научиться практическому применению языковые конструкции Java для проверки условий и организации циклов. Воспользоваться стандартными средствами java для чтения-записи текстовых данных.
Имеется входной текстовый файл, в каждой строке которого содержится по одному целому числу:
A
B
X1
…
Xi
…
здесь все значения A, B, X1... Xi это числа.
Вывести в выходной текстовый файл такие значения последовательности {Xi}, которые принадлежат интервалу [A, B], указанному в первых двух строках входного файла.
Напишем программу на java с использованием классов семейства Reader.
В Java существует множество интерфейсов и классов, обеспечивающих работу с данными. Основные интерфейсы и классы сосредоточены в пакете java.io.
За чтение-запись данных в Java отвечает несколько интерфейсов разного уровня:
Потоки InputStream/OutputStream реализуют стандартную парадигму работы с последовательностями байт, так что специально на них останавливаться не будем. Бо'льший интерес представляют высокоуровневые надстройки над ними - классы, реализующие интерфейсы Reader/Writer, PrintStream .
Работа с файлами и потоками вообще, организуется классически виде действий "открытие-работа-закрытие", с ответственностью за освобождение ресурсов программистом. Совершенно естественно здесь будет использована конструкция try-finally:
// создание и открытие потока stream …
XStream stream = new XStream(); // здесь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)
Они недостаточно удобны для работы с текстами, т.к. ориентированы на работу с отдельными символами, а не со строками.
Более удобно использовать потомка Reader BufferedReader, с его более приспособленными методами получения строк readLine:
public String readLine()
public String readLine(boolean ignoreLF)
В них данные сразу считываются в виде строк.
Интерфейс PrintStream описывает выводт строк и его удобно использовать для формирования текстового вывода и журналирования:
void print(Type data) семейство методов вывода типизированных данных (Type)
и void println(Type data)
PrintStream printf(String format, Object ... args) форматированный вывод
и PrintStream format(String format, Object ... args)
В 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.
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"/"Open Project ...".
В текстовом файле в первой строке задано целое число N. Далее в каждой последующей строке содержится ровно по N чисел. Вывести в выходной текстовый файл построчные суммы.
Пример входного файла:
3
12 35 -10
-9 3 1
7 4 6
0 -100 -2
И соответствующий сформированный ответ:
37
-5
17
-102