Имеется код:
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream fis = new FileInputStream(reader.readLine());
FileWriter fos = new FileWriter(reader.readLine());
reader.close();
String number = "";
while (fis.available() > 0) {
char ch =(char) fis.read();
if (ch != ' ') {
number = number + ch;
} else {
fos.write(Integer.toString((int) Math.round(Double.parseDouble(number))));
number = "";
fos.write(ch);
}
}
if(number.length() != 0) {
fos.write(Integer.toString((int) Math.round(Double.parseDouble(number))));
number = "";
}
fis.close();
fos.close();
}
Подскажите пожалуйста, как работает данный код, а именно эта часть:
String number = "";
while (fis.available() > 0) {
char ch =(char) fis.read();
if (ch != ' ') {
number = number + ch;
} else {
fos.write(Integer.toString((int) Math.round(Double.parseDouble(number))));
number = "";
fos.write(ch);
}
}
Очень сложно дается данная тема и прошу если не трудно объяснить каждую строку кода за то, что она делает и отвечает. Спасибо большое за уделенное время. И что можно посмотреть по видео с данной темой, где все станет ясно?
костыльномпобайтовом чтении, мы будем считывать по одному байту: - 3 . 5 6 Пока не встретим пробел (это первое условие ch != ' ') Как только встретим пробел, значит число закончилось, и наш набор байтов мы можем преобразовать в число: Это ветка else: У нас есть строка "-3.56". Сначала мы парсим строку в дабл. double d = Double.parseDouble(number); получаем d = -3.56d; далее округляем дабл и приводим к инту (отбрасывается дробная часть, то есть -4.0 сначала, после отбрасывания дробной части - -4. int roundedNumber = (int) Math.round(d); Далее переводим тип инт в строку, чтобы писалось в файл корректно: String result = Integer.toString(roundedNumber); Записываем в файл результат и сh ( это у нас пробел, разделитель чисел в выводе). Какие вопросы еще? По теме, задач джава раша с головой хватит чтобы разобраться как по мне, можешь еще видео посмотреть (Головач I/O)