将 char 转换为 int java 的问题

我正在编写一个采用中缀表达式并将其转换为后缀的代码。然后它采用后缀表达式并解决它。从中缀转换为后缀工作正常,但由于某种原因,如果后缀表达式包含 2 位或更多,我的代码无法解决后缀表达式。最初它会读取 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)));

            }

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


慕哥9229398
浏览 153回答 2
2回答

慕尼黑5688855

我可以建议一个完全不同的解决方案与 lambda 一行:LinkedStack<Integer> stack = new LinkedStack<Integer>();Stream.of( str.split( "\\D" ) ).forEach( s -> stack.push( Integer.parseInt( s ) ) );

慕勒3428872

我自己找到了一个解决方案:因此,例如,如果 int 应该是 2 位数字(10-99)而不是,我将使用 if 语句:&nbsp;char x = str.charAt(i);&nbsp;char y = str.charAt(i+1);&nbsp;int k = x * 10;&nbsp;int m = k + y;&nbsp;stack.push(m);&nbsp;i++;我发现这可以代替:int k = Character.getNumericValue(str.charAt(i)) * 10;int m = k + Character.getNumericValue(str.charAt(i+1));stack.push(m);i++;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java