Почему неверно считается сумма байтов?
Нужно посчитать сумму входящих байтов. Вроде код пишу со всеми рекомендациями.
Почему дает неверный ответ? Объясните пожалуйста где у меня ошибка.
import java.io.IOException;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
public class Program
{
public static void main(String[] args) throws IOException {
byte[] input = {5, 17, 9, 30};
int b = 61;
InputStream inputStream = new ByteArrayInputStream(input);
int result = sumOfStream(inputStream);
System.out.println(result);
System.out.println(b == result);
}
public static int sumOfStream(InputStream inputStream) throws IOException {
int hSum = 0;
int nByte = inputStream.read();
while ((nByte = inputStream.read()) != -1) {
int x = (byte) nByte;
hSum = hSum + x;
nByte = inputStream.read();
}
return hSum;
}
}
Ответы (2 шт):
Автор решения: AlekseiGaile
→ Ссылка
public static int sumOfStream(InputStream inputStream) throws IOException {
int hSum = 0;
int nByte;
while ((nByte = inputStream.read()) != -1) {
int x = (byte) nByte;
hSum = hSum + x;
}
return hSum;
}
Каждый раз когда вы пишете int nByte = inputStream.read() вы считываете следующее значение из массива, поэтому метод и работает неправильно.
Автор решения: Roman C
→ Ссылка
Потому, что при чтении из потока, не все значения считаются. Лишнее чтение перед циклом и в конце цикла. Вот как должна выглядеть функция
public static int sumOfStream(InputStream inputStream) throws IOException {
int hSum = 0;
int nByte;
while ((nByte = inputStream.read()) != -1) {
hSum+=nByte;
}
return hSum;
}