Java: Как получить массив byte [] для возврата жестко закодированных чисел и что он возвращает в настоящее время? - PullRequest
1 голос
/ 10 апреля 2020

Я жестко запрограммировал байтовый массив (это должны быть байты, а не целые числа из соображений пространства) и вызвал его для конструктора, который принимает байтовый массив:

это мой байт [] и конструктор из тестового файла.

byte[] b = {'7','8','9'};
MegaInt num4 = new MegaInt(b, false); //the second parameter is just a boolean to see if the number is negative or not

здесь он вызывается из конструктора в файле класса:

public MegaInt(byte[] inDigits, boolean isNeg)
{
    inDigits.toString(); //tried turning to string here but doesn't make a difference
    digits = new byte[inDigits.length]; //digits is a class (static final) variable
    for (int i = 0; i < inDigits.length; i++)
    {
        digits[i] = inDigits[i];
    }
    if(digits == null || digits.length == 0 || (digits[0] == digits.length && digits[0] == digits['-']))
    {
        throw new IllegalArgumentException(s);
    }
    int validIndex = 0; 
    int leadingZeroCount = 0;
    boolean leadingZero = true;
    int stringLength = digits.length;
    for (int j = 0; j < digits.length; j++)
    {
        System.out.print(digits[j] + ", "); //printing from here
    }
    isNegative = isNeg; //should this be elsewhere?
    for (int i = 0; i < stringLength; i++)
    {
        byte b = digits[i]; //does not work for charAt
        System.out.println(b);
        if(!isValidDigit(b)) //gets here and throws exception because of the '55'.
        {
            throw new IllegalArgumentException(s);
        }
        if (leadingZero)
        {
            if (b != '0')
            {
                digits = new byte[stringLength - leadingZeroCount];
                digits[validIndex] = (byte)Character.getNumericValue(b);
                leadingZero = false;
            }
            else
            {
                leadingZeroCount++;
            }
        }
        else
        {
            validIndex++;
            digits[validIndex] = (byte)Character.getNumericValue(b);
        }
    }
    if (leadingZero) //if there is only 1 zero in the array.
    {
        digits = new byte[1];
        digits[0] = 0; 
        isNegative = false;
    }

private boolean isValidDigit(byte b) //checks if digits are proper for Byte constructors. 
{
    byte[] search = {1,2,3,4,5,6,7,8,9,0};
    for (int j = 0; j < search.length; j++)
    {
        if (b == search[j])
        {
            return true; //for valid digits. 
        }
    }
    return false;
}

это то, что он возвращает:

55,56,57,55

Я полагаю, что это должно быть какое-то байтовое представление (я не думаю, что это двоичное или шестнадцатеричное?), Но, очевидно, это не то, что я хочу, как я могу получить это использовать цифры, которые я жестко закодировал? ИЛИ Я правильно инициализирую массив байтов? Почему он возвращает 4 числа, когда в массиве только три? Я чувствую, что это очень простая проблема, и все же я не нахожу ничего интересного в Интернете, поэтому я надеюсь, что найдется кто-то, кто может помочь!

...