Возникли проблемы с проблемой рекурсии, которая преобразует строку в Int - PullRequest
0 голосов
/ 30 октября 2018

Итак, проблема в следующем. Вы должны создать метод, который принимает строку в качестве параметра, который состоит из всех чисел, и вам нужно взять эту строку и преобразовать ее в целое число. Вы должны использовать рекурсивное решение для решения проблемы.

Я написал следующий код, и он прекрасно работает, когда я ввожу «1234» или «138775», но как только я ввожу число, содержащее 0, он возвращает странный результат.

100, 1001, 101 и 12045 возвращают 10, 11, 110 и 1245 соответственно. Как уже упоминалось выше, код прекрасно работает, когда я отправляю такие вещи, как «1234» или «14384», но как только появляется ноль, он имеет тенденцию удалять этот ноль.

Я пробовал разные преобразования int в строки из класса Integer, такие как parse (int), но это имело тот же результат.

/**
 * converts a string of numbers to an int
 * 
 * @param String str: original string of numbers
 * @return int recursiveStringInt: returns the int value of the string
 */
public static int recursiveStringInt(String str)
{
    if(str.length() == 1)
        return Integer.valueOf(str);
    else
    {
        return Integer.valueOf(str.substring(0,1) + recursiveStringInt(str.substring(1)));
    }
}

Спасибо за помощь, ребята!

Пожалуйста, дайте мне знать, если требуется какое-либо разъяснение.

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Это потому, что когда вы анализируете подстроку типа 054 в int, она становится 54.

Попробуйте этот код: -

public static int recursiveStringInt(String str) {
    return str.length() == 1
            ? Integer.valueOf(str)
            : (int) (Integer.parseInt(str.substring(0, 1)) * Math.pow(10, str.length() - 1)) + recursiveStringInt(str.substring(1));
}

Я использовал эту логику: -

105 = 1*100 + 0*10 + 5*1

Редактировать: Если вы не понимаете троичный оператор, вот версия if-else: -

public static int recursiveStringInt(String str) {
    if (str.length() == 1) {
        return Integer.valueOf(str);
    } else {
        return (int) (Integer.parseInt(str.substring(0, 1)) * Math.pow(10, str.length() - 1)) + recursiveStringInt(str.substring(1));
    }
}
0 голосов
/ 30 октября 2018

Ваши скобки немного не подходят для того, что вы пытаетесь сделать, и логике нужно немного поработать ... вам нужно взять символ последний текущей строки, преобразовать его в целое число, и добавьте его к преобразованию фронта строки раз 10.

int recursiveStringInt(String str) {
    int length = str.length()
    if(length == 1)
        return Integer.valueOf(str);
    else
    {
        int temp = Integer.valueOf(str.substring(length-1)) + ( 10 * recursiveStringInt(str.substring(0,length-1)));
        return temp;
    }
}

Тривиальный регистр "8" приводит к выполнению только первого блока.

Следующий случай «83» приводит к temp = 3 + (10 * 8) = 83

Следующий случай «103» приводит к temp = 3 + (10 * (0 + (10 * 1))) = 103

0 голосов
/ 30 октября 2018

Попробуйте использовать решение "разделяй и властвуй"

public static void main(String[] args) {

    System.out.println(recursiveStringInt("12034", 0));

}

public static int recursiveStringInt(String str, int pow)
{
    if(str.length() < 1)
        return 0;
    else
    {
        int temp = Integer.valueOf(str.substring(str.length() -1)) 
                                                       * (int) Math.pow(10.0, 1.0 * pow);
        temp += recursiveStringInt(str.substring(0, str.length() -1), pow + 1);
        return temp;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...