diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 7efef9a8..f2371641 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -15,7 +15,16 @@ public static void main(String[] args) throws IOException { } public static int checkSumOfStream(InputStream inputStream) throws IOException { - // your implementation here - return 0; + if (inputStream == null) + throw new IllegalArgumentException(); + + int sum = 0; + int currentByte; + + while ((currentByte = inputStream.read()) != -1) { + sum = Integer.rotateLeft(sum, 1) ^ currentByte; + } + + return sum; } } diff --git a/task02/README.md b/task02/README.md index 2363f126..f66971a2 100644 --- a/task02/README.md +++ b/task02/README.md @@ -1,6 +1,7 @@ # Задание 02 Преобразование потока -По историческим причинам на разных платформах принят разный способ обозначения конца строки в текстовом файле. На Unix-системах конец строки обозначается символом с кодом 10 ('\n'), на Windows — двумя последовательными символами с кодами 13 и 10 ('\r' '\n'). +По историческим причинам на разных платформах принят разный способ обозначения конца строки в текстовом файле. +На Unix-системах конец строки обозначается символом с кодом 10 ('\n'), на Windows — двумя последовательными символами с кодами 13 и 10 ('\r' '\n'). Напишите программу, которая будет преобразовывать переводы строк из формата Windows в формат Unix. Данные в формате Windows подаются программе в System.in, преобразованные данные должны выводиться в System.out. diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index 865ea659..f64828b1 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -4,10 +4,23 @@ public class Task02Main { public static void main(String[] args) throws IOException { - // чтобы протестировать свое решение, вам нужно: - // - направить файл input.test в стандартный ввод программы (в настройках запуска программы в IDE или в консоли) - // - направить стандартный вывод программы в файл output.test - // - запустить программу - // - и сравнить получившийся файл output.test с expected.test + int prevByte = -1; + int currentByte; + + while ((currentByte = System.in.read()) != -1) { + if (prevByte == 13 && currentByte == 10) { + System.out.write(10); + prevByte = -1; + } else { + if (prevByte != -1) { + System.out.write(prevByte); + } + prevByte = currentByte; + } + } + if (prevByte != -1) { + System.out.write(prevByte); + } + System.out.flush(); } } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 332e0366..35852648 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,7 +1,6 @@ package com.example.task03; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.nio.charset.Charset; public class Task03Main { @@ -9,13 +8,23 @@ public static void main(String[] args) throws IOException { //здесь вы можете вручную протестировать ваше решение, вызывая реализуемый метод и смотря результат // например вот так: - /* + System.out.println(readAsString(new FileInputStream("task03/src/com/example/task03/input.test"), Charset.forName("KOI8-R"))); - */ + } public static String readAsString(InputStream inputStream, Charset charset) throws IOException { - // your implementation here - return ""; + if (inputStream == null || charset == null) throw new IllegalArgumentException();// Проверка параметров + + InputStreamReader reader = new InputStreamReader(inputStream, charset);// Чтение байтов и преобразование в символы через кодировку + BufferedReader bufferedReader = new BufferedReader(reader); + + StringBuilder result = new StringBuilder(); + String line; + while ((line = bufferedReader.readLine()) != null) { + result.append(line); + } + + return result.toString(); } } diff --git a/task04/README.md b/task04/README.md index 44466235..140e741a 100644 --- a/task04/README.md +++ b/task04/README.md @@ -1,6 +1,7 @@ # Задание 04 Поиск чисел -Напишите программу, читающую текст из System.in и выводящую в System.out сумму всех встреченных в тексте вещественных чисел с точностью до шестого знака после запятой. Числом считается последовательность символов, отделенная от окружающего текста пробелами или переводами строк и успешно разбираемая методом Double.parseDouble. +Напишите программу, читающую текст из System.in и выводящую в System.out сумму всех встреченных в тексте вещественных чисел с точностью до шестого знака после запятой. +Числом считается последовательность символов, отделенная от окружающего текста пробелами или переводами строк и успешно разбираемая методом Double.parseDouble. #### Sample Input 1: diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 4236c2e7..9e47d458 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -1,6 +1,8 @@ package com.example.task04; import java.io.IOException; +import java.util.Locale; +import java.util.Scanner; public class Task04Main { public static void main(String[] args) throws IOException { @@ -8,7 +10,18 @@ public static void main(String[] args) throws IOException { // - направить файл input.test в стандартный ввод программы (в настройках запуска программы в IDE или в консоли) // - запустить программу // - проверить, что получилось 351.731900 + Scanner scanner = new Scanner(System.in); + double sum = 0.0; - System.out.println("0.0"); + while (scanner.hasNext()) { + String token = scanner.next(); + try { + double number = Double.parseDouble(token); + sum += number; + } catch (NumberFormatException e) { + // Игнорируем все токены, которые не являются числами + } + } + System.out.printf(Locale.US,"%.6f", sum); } }