Добрый день!
Не могу понять что не так, код не проходит валидацию, хотя вроде все правильно. Интересует незакомментированный код.
Алексей Ъыь
24 уровень
Не проходит валидацию по 3 и 4 п.п.
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Алексей Ъыь
21 ноября 2017, 15:57
Egorro, спасибо!
С readFirstFile.read вроде разобрался, но не понял где ошибка с массивом.
0
--------Master
21 ноября 2017, 16:13
Даже проблема не с самим массивом и не только для нечетного размера, а в попытке чтения "за пределами" файла:
При длине файла в 10 байт размеры массивов - 5 и 5, т.е. в этой строчке пытается читать байты с 6 по 11, что приводит к ошибке.
Вообще, перед попыткой сдачи лучше запускать и тестировать такие вещи, чтоб разобраться, в чем косяк и работает ли программа в принципе))
0
Алексей Ъыь
21 ноября 2017, 16:34
Эту строку я разделил на:
Но почему Вы пишете, что читаются байты с 6 по 11 при размере массива 10?
arrChet.length+1 будет соответствовать элементу массива arrChet[5]. Считать она должна arrChet.length = 5 элементов, то есть считает 6-ой, 7-ой, 8-ой, 9-ый и 10-ый байты. Разве не так? Поправьте, если ошибаюсь.
0
--------Master
21 ноября 2017, 16:46
Потестировал еще по-разному - оказывается, даже и не так: offset - это смещение относительно текущей позиции, а не относительно начала файла. Т.е. в данном случае идет попытка прочитать 5 байт не с текущей позиции (5), а с (5+6). Получается, во второй массив надо также читать с offset = 0, тогда программа отрабатывает без ошибок
+2
Алексей Ъыь
21 ноября 2017, 20:15
Спасибо! Все проглядел)
0
--------Master
21 ноября 2017, 12:42
Метод readFirstFile.read возвращает не массив, а кол-во считанных байт, а сами байты записываются в передаваемый массив.
Кроме того, неверно создается массив для нечетного размера файла, выбрасывает IndexOutOfBoundsException
0