Как я могу поместить числа в конце целого (не суммируя)? - PullRequest
1 голос
/ 28 сентября 2011

Я занят созданием дерева выражений для школы, я уже построил часть, в которой создается дерево, и печать результата арифметического выражения также работает.Для выполнения задания есть дополнительная часть, я бы тоже хотел, чтобы это работало.Дополнительное назначение делает программу способной читать выражения.Я довольно далеко с этим, но я не уверен, что я закодировал эту вещь с хорошим положением чисел в конце int.Проблема, которую я пытаюсь решить, заключается в том, когда есть такое выражение ...(3 * (8-2)) + (12/4)... как я могу получить 12 из массива символов, так как они являются двумя отдельными символами?Я использовал массив символов в остальной части кода, но, конечно, можно использовать строку для получения двух символов.

Я сделал это следующим образом:

// if the next character is a digit...
if (Character.isDigit(expression[i])) {
    // ... make local variables 'nextNumber'...
    int nextNumber = 0;
    // ... and 'a' which already contains this first digit...
    String a = Character.toString(expression[i]);
    // ... so when we check for the next character... 
    for (int k = i+1; k < expression.length; k++) {
        // ... wether it is a digit,...
        if (Character.isDigit(expression[k])) {
            // ... we can add that digit to 'a',...
            a = a + Character.toString(expression[k]);
        }
        // ... and if it is not a digit...
        else if (!Character.isDigit(expression[k])) {
            // ... we will exit the for loop.
            break;
        }
    }
    // now we have to change the String to an integer...
    nextNumber = Integer.getInteger(a);
    // ... and then we are sure we have the whole number as it was ment to be
    // in the given expression
    return new ET(nextNumber);
}

Но этокажется таким неряшливым.Я долго искал в Google, и все, что я нашел, было так, но я не могу представить, что нет более простого или хотя бы менее небрежного способа.Ребята, вы знаете лучший путь или этот путь?

Решение, которое я создаю, является относительно простым способом решения проблемы дерева выражений, я мог бы решить его больше, но я не знаюхочу потратить больше времени, чем нужно, пока я могу показать учителю, что понял уроки.Курс, по которому он предназначен, - это Алгоритмика, так что речь не идет об изучении Java, я имею в виду, что я не прошу решения проблемы, которую учитель попросил меня решить.

Заранее спасибо!

1 Ответ

2 голосов
/ 28 сентября 2011

Вы можете создать цифру цифра за цифрой (псевдокод):

number = 0
for each digit {
    number = number * 10 + value_of(digit)
}

Это даст number как значение строки цифр (слева направо) в базе 10.

В вашем случае: digits = (1,2)

number = 0
number = number * 10 + 1  // <= number = 0*10+1=1
number = number * 10 + 2  // <= number = 1*10+2=12    
...