Что бы я не делал пишет либо "Программа выводит слишком мало строк" либо "Программа выводит слишком много строк", бред какой то..
Some1
31 уровень
В чем прикол этой задачи?
Архивный
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
YuriyExpert
8 ноября 2019, 15:43
В этой задаче 0 считается четным числом. Если "Программа выводит слишком мало строк", то скорее всего забыли про отрицательные числа. Чтобы сказать что-то конкретное нужно видеть код.
0
Some1
8 ноября 2019, 15:53
Ниже (выводит слишком много)
0
JustinianJudge в Mega City OneMaster
8 ноября 2019, 15:34
Прикол в том, чтобы вывести именно то, что нужно. Ни больше ни меньше
0
Some1
8 ноября 2019, 15:51
Вот мой код:
В чем тут проблема? Слишком сложно понять.
0
JustinianJudge в Mega City OneMaster
8 ноября 2019, 16:17
Проблема в внимательности.
Числа нужно читать. Ты читаешь байты.
Есть же пример файла в условиях. И что должно выдавать.
Ты свой вывод:
сравнивал с тем что в примере в условиях?
Если что-то не получается, первое что ты должен делать, очень внимательно читать условия.
0
Some1
8 ноября 2019, 17:24
а как числа читать?
0
JustinianJudge в Mega City OneMaster
8 ноября 2019, 17:44решение
У тебя есть в программе объект типа InputStream который может читать с файла.
Теперь тебе нужно его взять и сделать так, как ты обычно читаешь числа с консоли, просто там у тебя InputStream это System.in, но принцип тот же.
так мы прочтем с файла строку и получим число, а не набор байтов.
потоки будут детальней чуть позже вроде, пока просто запомни, что есть два основных типа потоков данных - байтовые и символьные.
Есть две отдельные большие иерархии входных потоков: байтовые потоки (InputStream и его наследники) и символьные потоки (Reader и его наследники). Разделение понятно, если нас интересует байты сплошняком, передача данных потоком, работа с файлами целиком, мы работаем с байтами и юзаем наследников InputStream. Если нас интересует работа с символами, текстом, чарами и тд, мы юзаем Reader и наследники.
Байтовые потоки имеют метод read и отдают байты (значение от 0..255).
Например число -25 это три байта: минус, два, пять.
+3
JustinianJudge в Mega City OneMaster
8 ноября 2019, 17:45
Символы: буквы, цифры и прочие знаки, имеют свое отображение в коде: они хранятся и передаются системой в виде последовательности байт.
Какое именно значение для какого символа зависит от кодировок.
Например, если мы считаем с файла в формате UTF-16, кириллическую А, это будет два байта,
208 и 144 (unsigned byte), которые вместе образуют русское А.
Если мы считаем непосредственно наследником суперкласса Reader, например InputStreamReader, то этот класс под капотом содержит логику преобразования входящих данных по стандартной кодировке, которая стоит на платформе (ОС) по умолчанию. Но можно использовать и перегруженный конструктор и прямо указать в какой кодировке мы хотим читать.
У меня стоит UTF, поэтому. Когда я ввожу кириллическую А:
в системную переменную System.in попадает через ОС два байта, 208 и 144 (unsigned), потом InputStreamReader это все дело преобразовывает используя системные настройки, у меня UTF, значит получается char с кодом 1040, который сооответствует по таблице Юникод букве А.
Есть еще BufferedReader это обертка, которая под капотом содержит буфер (8192 символа), и загоняет все в буффер, чтобы не нужно было за каждой буквой гонять системные ресурсы (консоль или файловую систему).
То есть и без BufferedReader, можно спокойно читать символы с потока ввода. Просто по одному.
bufferedReader.readLine(); - этот код исполняется так:
если в буфере ничего нет, тогда запросить информацию с потока (в данном случае InputStreamReader). Но если бы там был файл, даже подав запрос на чтение одной строки, буффередРидер бы скачал 8192 символов.
И при каждом вызове readLine() не было бы обращения к файлу, он просто отдавал бы данные с буфера, пока буфер не опустошиться, как только это произойдет, он пошлет гонца в файловый поток, чтобы выкачать еще 8192 символов, поэтому этот класс и называется Буфферризованный ридер.
Если говорить про другие варианты кодировок, то кириллическая буква А в:
KOI8-R - 225
CP 855 - 161
Windowns-1251 - 192
ISO-8859-5 - 176
и тд.
+2
Some1
8 ноября 2019, 18:12
Спасибо большое, теперь вроде понял
0