• 0.25

  • +0.99

task1822

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

Считать с консоли имя файла.

Найти в файле информацию, которая относится к заданному id, и вывести ее на экран в виде, в котором она записана в файле.

Программа запускается с одним параметром: id (int).

Закрыть потоки.



В файле данные разделены пробелом и хранятся в следующей последовательности:

id productName price quantity

где id — int.

productName — название товара, может содержать пробелы, String.

price — цена, double.

quantity — количество, int.



Информация по каждому товару хранится в отдельной строке.


Мой алгоритм решения:
1. Используем BufferedReader, считываем имя файла.
2. Используем FileInputStream и для удобства следом ещё один BufferedReader с аргументом из потока FileInputStream.
3. Создаем отдельную строковую переменную s для удобства.
4. С помощью while(....ready()), считываем строку из последнего нашего BufferedReader в ещё одну строковую переменную, допустим s1.
5. Обрезаем s1 с помощью substring() по первый пробел, и сохраняем полученный результат в переменной s.
6. Всё ещё в этом цикле, делаем проверку с помощью if, если наша s эквивалентна единственному параметру запуска программы (т.е. args[0]), то вывести всю считанную строку на экран.
7. Закрыть все потоки.

task1914

У кого затруднения с задачей, возможно поможет мой алгоритм:

Условие задачи: В методе main подмени объект System.out написанной тобой ридер-оберткой по аналогии с лекцией.

Твоя ридер-обертка должна выводить на консоль решенный пример.

Вызови готовый метод printSomething(), воспользуйтесь testString.

Верни переменной System.out первоначальный поток.

Возможные операции: + — *

Шаблон входных данных и вывода: a [знак] b = c

Отрицательных и дробных чисел, унарных операторов — нет.

Пример вывода:

3 + 6 = 9

Мой алгоритм решения:

1. Всё в точности как в примере лекции, подменяем объект System.out оберткой. Здесь ничего придумывать не надо. Так как код был в лекции, могу его продублировать для удобства:
PrintStream consoleStream = System.out;

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        PrintStream stream = new PrintStream(outputStream);
        System.setOut(stream);
        testString.printSomething();
        String result = outputStream.toString();

        System.setOut(consoleStream);

2. Дальше уже надо подумать немного. Создаете массив строк, разделяя result с помощью метода split по пробелам. Тем самым у вас в массиве будут отдельно и цифры и знаки (но пока только в строковом формате всё).
3. Создаете три переменные типа int: одна нужна, чтоб записать результат, а в две остальные мы производим перевод из строкового формата в числа, с помощью Integer.parseInt в качестве аргументов элементы массива, соответствующие цифрам.
4. Далее банальная проверка if else по соответствию второго элемента массива и знаков по условию задачи. К примеру: если equals("+"), то res = a + b;
5. Выводим на экран, при этом правильно соединяем все элементы учитывая все пробелы, как в примере задачи.

Надеюсь кому-нибудь поможет.

level15.lesson12.home09

Программа работает, но не проходит тест. Подскажите в чем bug?
/* Парсер реквестов
Считать с консоли URl ссылку.
Вывести на экран через пробел список всех параметров (Параметры идут после ? и разделяются &, например, lvl=15).
URL содержит минимум 1 параметр.
Если присутствует параметр obj, то передать его значение в нужный метод alert.
alert(double value) - для чисел (дробные числа разделяются точкой)
alert(String value) - для строк

Пример 1
Ввод:
http://javarush.ru/alpha/index.html?lvl=15&view&name=Amigo
Вывод:
lvl view name

Пример 2
Ввод:
http://javarush.ru/alpha/index.html?obj=3.14&name=Amigo
Вывод:
obj name
double 3.14
*/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class Solution {
    public static void main(String[] args) throws IOException
    {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        URL url = new URL(r.readLine());
        String s = url.toString();
        String s1 = s.substring(s.indexOf("?")+1);
        if (s1.contains("&"))
        {
            String[] s2 = s1.split("&");
            for (String line : s2)
            {
                if (line.contains("=")&&!line.contains("obj"))
                {
                    String attributeName = line.substring(0, line.indexOf("="));
                    System.out.print(attributeName+" ");
                } else  if (!line.contains("=")&&!line.contains("obj"))
                {
                    System.out.print(line+" ");
                } else {
                    String attributeName = line.substring(0, line.indexOf("="));
                    System.out.print(attributeName+" ");
                }
            }
            System.out.println("");
            if (s1.contains("obj"))
            {
                String value = s1.substring(s1.indexOf("obj=")+4, s1.indexOf("&"));
                if (value.contains("."))
                {
                    try
                    {
                        double d = Double.parseDouble(value);
                        alert(d);
                    }
                    catch (NumberFormatException e)
                    {
                    }
                } else
                    alertS(value);
            }
        } else {
            if (s1.contains("=")&&!s1.contains("obj"))
                System.out.println(s1.substring(0,s1.indexOf("=")));
            else if (s1.contains("=")&&s1.contains("obj"))
            {
                System.out.println(s1.substring(0,s1.indexOf("=")));
                try
                {
                    double value = Double.parseDouble(s1);
                    alert(value);
                }
                catch (NumberFormatException e)
                {
                    alertS(s1);
                }
            }
            else
                System.out.println(s1);
        }

    }
    public static void alert(double value) {
        System.out.println("double " + value);
    }

    public static void alertS(String value) {
        System.out.println("String " + value);
    }
}