После запуска различных тестов для этого кода он выглядит так, как будто работает правильно. Проблемы, которые вы видите, возможно, связаны с расширением знака в реализации byteArrayToInt
. Например, следующий код печатает -128
вместо ожидаемого 128
:
System.out.println(byteArrayToInt(intToByteArray(128)));
Попробуйте изменить код на:
private int byteArrayToInt(byte[] b) {
return (b[0] << 24) +
((b[1] & 0xFF) << 16) +
((b[2] & 0xFF) << 8) +
(b[3] & 0xFF);
}
Кроме того, предел MAXIMUM = 50000
в пределах IndexedByte.compareTo
никогда не достигается. Я получил java.lang.StackOverflowError
с входным массивом длиной 5214. Я бы предложил изменить это на итеративное, а не рекурсивное (это должно быть довольно просто, так как вы знаете длину входного массива, и это также предотвратит лишние циклы патологический случай, когда все байты во входном массиве равны).