Проблема преобразования char в int java - PullRequest
0 голосов
/ 11 октября 2018

Я пишу код, который принимает инфиксное выражение и преобразует его в постфиксный.Затем он берет выражение постфикса и решает его.Преобразование из инфикса в постфикс работает нормально, но по какой-то причине мой код не может решить выражение постфикса, если оно содержит двухзначное число или более.Первоначально он читал бы 10 2+ и возвращал 3, но с моим текущим кодом он читает 10 2+ и выплевывает 540, поэтому я предполагаю, что при переходе от char к int я получаю код ASCII вместо фактического значения,Вот часть моего кода, где он пытается прочитать строку постфикса, определить, какой номер у него есть, и поместить его в стек для последующего решения: (Обратите внимание, я знаю, что текущая установка поддерживает только до 3 цифр)

LinkedStack<Integer> stack = new LinkedStack<Integer>();
    for (int i = 0; i < str.length(); i++) {
        if(Character.isDigit(str.charAt(i))) {
            if(i+1 == str.length()) {
                stack.push(Character.getNumericValue(str.charAt(i)));
                break;
            }
            if(Character.isDigit(str.charAt(i+1))) {
                char x = str.charAt(i);
                char y = str.charAt(i+1);
                int k = x * 10;
                int m = k + y;
                stack.push(m);
                i++;
            }
            else if(Character.isDigit(str.charAt(i+1)) && Character.isDigit(str.charAt(i+2))){
                char x = str.charAt(i);
                char y = str.charAt(i+1);
                char z = str.charAt(i+2);
                int k = x * 100;
                int w = y * 10;
                int m = x + y + z;
                stack.push(m);              
                i++;
                i++;
            }
            else{
                stack.push(Character.getNumericValue(str.charAt(i)));
            }

Любой отзыв будет полезен.Спасибо!

1 Ответ

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

Я сам нашел решение:

Так, например, я буду использовать оператор if, если int должно быть двухзначным числом (10-99) вместо:

 char x = str.charAt(i);
 char y = str.charAt(i+1);
 int k = x * 10;
 int m = k + y;
 stack.push(m);
 i++;

Я обнаружил, что это работает вместо:

int k = Character.getNumericValue(str.charAt(i)) * 10;
int m = k + Character.getNumericValue(str.charAt(i+1));
stack.push(m);
i++;
...