С консоли считать имя файла.
Посчитать в файле количество символов ',', количество вывести на консоль.
Закрыть потоки.
Подсказка: нужно сравнивать с ascii-кодом символа ','.
Подсчет запятых
- 10
Недоступна
Комментарии (154)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
milyasow
1 июня, 10:13
Можно сравнить и с Character.valueOf(',')
+1
Евгений
31 марта, 14:00
кроме названии переменных отличился оберткой в трай-кеч
0
Александр Горохов
19 ноября 2021, 07:51
Решил точь в точь, как в правильном решении, только имя счетчика другое)
0
Валерий Backend Developer в Mriya Resort&Spa
14 ноября 2021, 14:23
Вспомнил прошлый опыт задач JavaRush, поэтому сразу полез искать код запятой в интернете.
Код нашел, задачу решил через обычное сравнение. Посмотрел готове решение не удивился, Когда увидел в коде сравнение на 44
0
Sergey Kornilov
9 ноября 2021, 12:00
Всего эту задачу решили 24478 учеников.
0
Zheleznyak Maxim
14 октября 2021, 10:20
после этой задачи чувствуешь себя не совсем тупым
+2
Сергей
12 октября 2021, 11:01
Оно и так сработало...
+6
Harsiyanin
9 января, 12:34
Из уверенности, что так уж точно не сработает, полез в комменты искать ссылки на материал...
0
qdeyar Backend Developer
3 октября 2021, 17:46
char z = ',';
if (x == (int)z)
count++;
😉
0
Hugon
21 марта, 17:55
если мы приведем символ из char в int, то число будет соответствовать таблице ASCII ?!
понял))
0
artinsky
1 октября 2021, 21:30
Копался с задачей два дня. И получал от валидатора таймаут. Почитал комментарии. Получилось вот что.
Код, который не проходит по таймауту выглядит так:
а работоспособный с точки зрения валидатора, так:
Нашёл у Хорстманна такое описание:
"..Как методы read(), так и методы write() блокируют доступ до тех пор, пока все байты не будут фактически считаны или записаны. Это означает, что если потоку ввода-вывода не удается получить доступ немедленно (что обычно случается из-за занятости сетевого соединения), происходит блокирование текущего потока исполнения"
Из чего я делаю вывод, что авторы задачи могли решить: "А давай-ка мы файл, в котором хотим подсчитать запятые, заблокируем, чтобы поток чтения не мог получить к нему доступ?" Тогда обращение за чтением без предварительной проверки состояния ридера (available) приведет к подвешиванию потока..
То есть, с той стороны может быть 2 файла в качестве теста: один свободный, второй заблокированный. Соответственно, но втором поток повиснет.
0
Serg
10 октября 2021, 14:45
А почему вы не пользуетесь подсказкой:
import java.io.BufferedReader;
Объявляем ридер, причем я его использовал как и для получения названия файла, так и для подсчета.
while(reader.ready()) {
if(reader.read()==44) count++;
}
Потом выводим в консоль count и все. 44 код запятой в ANSII
0
artinsky
11 октября 2021, 20:25
В условии сказано использовать FileInputStream, поэтому даже в голову не пришло посмотреть на BufferedReader. Но, спасибо)
Для меня было ценно понять принцип работы с блокировкой потока.
А вот искать ASCII код запятой было лень. Я думаю, нагляднее так:
0
Павел Рязанов
11 января, 06:55
Как мне кажется, в первом варианте у вас ошибка в блоке while. Поток читает байт. При read() байт в переводе в int принимает значение от 0 до 255. поэтому формулировка while ((data = fs.read()) != -1) всегда будет истина, программа не сможет завершиться. Так как валидатор не может завершить программу, он отвечает вам, что превышено время ожидания.
0
KingKazma
16 января, 15:24
он будет возвращать значения в диапазоне до тех пор пока есть что возвращать, как только поток будет пуст он вернет "-1", технически условие рабочее, встречал его много раз)
0
SWK
15 апреля, 14:40
Вчера 14.04.2022, т.е. через полгода с момента публикации исходного сообщения, администрация пообещала мне, что вариант ((data = fs.read()) != -1) будут принимать
наравне с (fs.available() > 0).
Правда, неизвестно, когда будет.
Правда, вопрос касался нескольких предыдущих задач.
Правда, юридического соглашения с администрацией мы не заключали...
Сообщение про таймаут от валидатора обескуражило администрацию на несколько дней. Т.е., о багтрекерах не все в курсе...
0
Roman
1 октября 2021, 07:43
Почему такой код не работает?
if ((byte)inputStream.read() == 00101100)
0
artinsky
12 октября 2021, 07:03
потому, что такая запись не воспринимается компилятором как двоичное представление числа.
пример
где, 0b или 0B - двоичный литерал +2