将char转换为int java的问题

时间:2018-10-11 01:05:08

标签: java char type-conversion postfix-notation

我正在编写一个代码,该代码带有一个中缀表达式并将其转换为后缀。然后,它采用后缀表达式并对其进行求解。从infix转换为postfix可以正常工作,但是由于某些原因,如果我的代码包含2位数或更多,则我的代码无法解析postfix表达式。最初它会读取10 2 +并返回3,但是使用我当前的代码,它将读取10 2 +并吐出540,所以我假设当我从char转到int时,我得到的是ASCII码而不是实际值。这是我的代码的一部分,它尝试读取后缀字符串,确定其具有的数字,然后将其放入堆栈中以供以后解决:(请注意,我知道当前设置最多支持3位数字)< / p>

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)));
            }

任何反馈都将有所帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

我自己找到了解决方法:

因此,例如,如果int应该是两位数字(10-99),我将使用if语句 代替:

 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++;

答案 1 :(得分:0)

我可以建议一个完全不同的解决方案
一行用lambda:

LinkedStack<Integer> stack = new LinkedStack<Integer>();
Stream.of( str.split( "\\D" ) ).forEach( s -> stack.push( Integer.parseInt( s ) ) );