public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
int minByte = 255;
try (FileInputStream fileInputStream = new FileInputStream(fileName)) {
while (fileInputStream.available() > 0) {
int currByte = fileInputStream.read();
if (currByte < minByte) minByte = currByte;
}
}
System.out.println(minByte);
}
}
ИЛИ ТАК
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
String s=bufferedReader.readLine();
FileInputStream fileInputStream=new FileInputStream(s);
ArrayList<Integer>belka=new ArrayList<>();
byte[] buffer = new byte[fileInputStream.available()];
fileInputStream.read(buffer,0, fileInputStream.available());
for (int j = 1; j < buffer.length; j++) {
if (buffer[0]>buffer[j])
{
buffer[0]=buffer[j];
// System.out.println(buffer[j]);
}
}
System.out.println(buffer[0]);
bufferedReader.close();
fileInputStream.close();
}
}
Минимальный байт
Ввести с консоли имя файла.
Найти минимальный байт в файле, вывести его на экран.
Закрыть поток ввода-вывода.
Requirements:
1. Программа должна считывать имя файла с консоли.
2. Для чтения из файла используй поток FileInputStream.
3. В консоль должен выводиться минимальный байт, считанный из файла.
4. Поток чтения из файла должен быть закрыт.
И еще
Пробовал во втором варианте так
while (fileInputStream.available() > 0) без try и цикл был бесконечным?
БелК в труселях
35 уровень
Добрый вечер. Почему результат разный и где правильно? Заранее спасибо
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grustnij Los'
1 декабря 2021, 18:14
на сколько я понимаю, byte хранит значения от -128 до 127, а значения поступают больше до 255. В связи с чем происходит переполнение буфера и числа уходят в отрицательные значения, где вы их и сравниваете. В правильном же решении сравниваются значения типа int от 0 до 255 и все ОК.
+1
БелК в труселях
1 декабря 2021, 20:19
Добрый вечер. Спасибо за ответ, но массив byte[] buffer. И почему while (fileInputStream.available() > 0) без try и цикл был бесконечным?
0
Ksenia VolkovaJava Developer в DXCMaster
1 декабря 2021, 20:50
Когда ты читаешь так
ты получаешь байты в unsigned виде, т.е. без знака, в диапазоне от 0 до 255.
Когда читаешь в массив байт, то получаешь те же байты в signed виде, со знаком, в диапазоне от -128 до 127.
Если у тебя в файле будут только символы ASCII, то разницы не будет (т.к. эти символы кодируются байтами из той части диапазона, которая совпадает при обоих способах). А вот если у тебя там будет кириллица, к примеру, то байты, которые в первом случае будут отнесены к диапазону (128, 255), во втором случае попадут в (-128, -1)
Что касается бесконечного цикла - покажи тот код, где цикл был бесконечным.
+3
БелК в труселях
1 декабря 2021, 22:10
А понятно. СПАСИБО КСЕНИЯ!!! Честно пытался вспомнить где бесконечность, но не могу вспомнить. Я сразу напишу. Еще раз спасибо.
0